2011-08-22 21 views
13

Estoy tratando de hacer una función de intercambio simple en PowerShell, pero pasar por referencia no parece funcionar para mí.El pase de PowerShell por referencia no funciona para mí

function swap ([ref]$object1, [ref]$object2){ 
    $tmp = $object1.value 
    $object1.value = $object2.value 
    $object2.value = $tmp 
} 

$a = 1 
$b = 2 
$a, $b 
swap ([ref]$a) ,([ref]$b) 
$a, $b 

esto debería funcionar, pero no ...

Output: 
    1 
    2 
    1 
    2 

¿Qué hice mal?

Respuesta

3

En primer lugar, lo está llamando mal. Poner una coma en la llamada para intercambiar significa que está pasando una matriz de objetos a como el primer parámetro. Si tuviera que corregirlo ...

swap ([ref]$a) ([ref]$b) 

... funcionaría entonces.

+0

Puede pasar tipos de valores de referencia. – Rynant

+0

@Rynant: Tienes razón. Lo hice una vez más y no me quejé acerca de los tipos de valores. No estoy seguro de qué hice diferente la primera vez. –

20

Por cierto, PowerShell tiene una sintaxis especial para intercambiar valores, no hay necesidad de utilizar $ tmp:

$a,$b = $b,$a 
Cuestiones relacionadas