2011-08-22 14 views
13

Sto cercando di creare una semplice funzione di scambio in PowerShell, ma il passaggio per riferimento non sembra funzionare per me.PowerShell passaggio per riferimento non funzionante per me

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 

questo dovrebbe funzionare, ma no ...

Output: 
    1 
    2 
    1 
    2 

Che cosa ho fatto di sbagliato?

risposta

3

In primo luogo, si sta sbagliando. Inserire una virgola nella chiamata da scambiare significa passare una matrice degli oggetti come primo parametro. Se dovessi correggerlo ...

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

... allora funzionerebbe.

+0

È possibile passare i tipi di valore per riferimento. – Rynant

+0

@Rynant: hai ragione. L'ho fatto di nuovo e non si lamentava dei tipi di valore. Non sono sicuro di quello che ho fatto di diverso la prima volta. –

20

A proposito, PowerShell ha una sintassi speciale per scambiare valori, non c'è bisogno di usare $ tmp:

$a,$b = $b,$a 
Problemi correlati