2011-08-22 9 views
13

Próbuję wykonać prostą funkcję wymiany w PowerShell, ale przekazywanie przez odniesienie nie wydaje się działać dla mnie.PowerShell przejść przez odniesienie nie działa dla mnie

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 

To powinno działać, ale nie ...

Output: 
    1 
    2 
    1 
    2 

Co zrobiłem źle?

Odpowiedz

3

Po pierwsze, nazywasz to błędem. Umieszczenie przecinka w wywołaniu zamiany oznacza, że ​​przekazujesz tablicę obiektów jako pierwszy parametr. Jeśli chcesz to poprawić ...

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

... to wtedy by działało.

+0

można przekazać typy wartości przez odniesienie. – Rynant

+0

@Rynant: Masz rację. Zrobiłem to ponownie i nie narzekałem na typy wartości. Nie jestem pewien, co zrobiłem inaczej za pierwszym razem. –

20

Nawiasem mówiąc, PowerShell ma specjalną składnię do wymiany wartości, nie trzeba używać $ tmp:

$a,$b = $b,$a 
Powiązane problemy