Tengo un ejemplo de un programa que crea una matriz, y luego intenta asignar el valor de esa matriz varias veces en otra matriz como una matriz multidimensional.La asignación de matriz Powershell asigna variable, no valor?
$a [email protected](0,0,0)
$b = @($a,$a,$a)
$b[1][2]=2
$b
'And $a is changed too:'
$a
La salida es:
PS E:\Workarea> .\what.ps1
0
0
2
0
0
2
0
0
2
And $a is changed too:
0
0
2
lo tanto, en este caso, la variable apunta realmente a la variable original. Este es un comportamiento muy inesperado. Es bastante limpio que uno pueda hacer esto, aunque nunca utilicé tanto los sindicatos en mi programación C. Pero me gustaría una manera de hacer la asignación del valor, no de la variable.
$b = @($a.clone(),$a.clone(),$a.clone())
Supongo que funcionaría, pero algo me dice que puede haber algo un poco más elegante que eso.
Gracias por la entrada.
Esto es PowerShell 2.0 en Windows 7 de 64 bits.
Gracias. Eso funciona. Simplemente no entiendo por qué una instancia de $ a = $ b le da el valor, y otra instancia le da la referencia. Especialmente cuando no hay garantía de que vas a obtener cuando $ b podría ser cualquier cosa. – bytehead
Esto no es específico de PowerShell; es cómo .NET maneja la asignación de memoria para Clases (por referencia) vs. Estructuras (por valor). Los valores numéricos (int, double, etc.) también son por valor. Hay una buena explicación en http://www.albahari.com/valuevsreftypes.aspx. Y de Microsoft http://msdn.microsoft.com/en-us/library/t63sy5hs(v=VS.100).aspx – Rynant
Gracias. Más lectura en la pila. – bytehead