我有一個程序創建一個數組,然後試圖將該數組的值多次分配到另一個數組作爲多維數組的示例。Powershell數組賦值賦值變量,而不是值?
$a [email protected](0,0,0)
$b = @($a,$a,$a)
$b[1][2]=2
$b
'And $a is changed too:'
$a
輸出是:
PS E:\Workarea> .\what.ps1
0
0
2
0
0
2
0
0
2
And $a is changed too:
0
0
2
所以在這種情況下,實際上爲變量指向原來的變量。這是非常意想不到的行爲。儘管我從來沒有在C編程中使用過多的工會,但是可以做到這一點非常簡潔。但我想要一種方法來實際上只做值的分配,而不是變量的分配。
$b = @($a.clone(),$a.clone(),$a.clone())
我想會工作,但有些東西告訴我可能會有一些比這更優雅的東西。
感謝您的意見。
這是Windows 7 64位下的PowerShell 2.0。
謝謝。這樣可行。 我只是不明白爲什麼一個$ a = $ b的實例給你的價值,另一個實例給你的參考。特別是當不能保證你會得到$ b可能是任何東西的時候。 – bytehead 2012-01-09 21:02:13
這不是特定於PowerShell的;它是如何處理類(通過引用)與結構(按值)的內存分配。數值(int,double等)也是按值計算的。在http://www.albahari.com/valuevsreftypes.aspx有一個很好的解釋。並從微軟http://msdn.microsoft.com/en-us/library/t63sy5hs(v=VS.100).aspx – Rynant 2012-01-09 21:50:15
謝謝。在堆上更多的閱讀。 – bytehead 2012-01-10 03:39:02