Ho un esempio di un programma che crea un array e quindi tenta di assegnare il valore di tale array più volte in un altro array come array multidimensionale.L'assegnazione dell'array Powershell assegna una variabile, non un valore?
$a [email protected](0,0,0)
$b = @($a,$a,$a)
$b[1][2]=2
$b
'And $a is changed too:'
$a
Il risultato è:
PS E:\Workarea> .\what.ps1
0
0
2
0
0
2
0
0
2
And $a is changed too:
0
0
2
Quindi, in questo esempio, la variabile è effettivamente indicando alla variabile originale. Questo è un comportamento molto inaspettato. È piuttosto pulito che si possa fare questo, anche se non ho mai usato i sindacati così tanto nella mia programmazione in C. Ma mi piacerebbe un modo per fare solo l'assegnazione del valore, non della variabile.
$b = @($a.clone(),$a.clone(),$a.clone())
Credo che funzionerebbe, ma qualcosa mi dice che potrebbe esserci qualcosa di un po 'più elegante di quello.
Grazie per l'input.
Questo è PowerShell 2.0 con Windows 7 a 64 bit.
Grazie. Che funzioni. Semplicemente non capisco perché un'istanza di $ a = $ b fornisce il valore e un'altra istanza fornisce il riferimento. Soprattutto quando non c'è alcuna garanzia che tu possa ottenere quando $ b potrebbe essere qualsiasi cosa. – bytehead
Non è specifico per PowerShell; è il modo in cui .NET gestisce l'allocazione della memoria per Classi (per riferimento) rispetto a Strutture (per valore). I valori numerici (int, double, ecc.) Sono anche in base al valore. C'è una buona spiegazione a http://www.albahari.com/valuevsreftypes.aspx. E da Microsoft http://msdn.microsoft.com/en-us/library/t63sy5hs(v=VS.100).aspx – Rynant
Grazie. Più lettura sul mucchio. – bytehead