web-dev-qa-db-ja.com

PowerShellの参照渡しが機能しない

PowerShellで単純なスワップ関数を作成しようとしていますが、参照渡しがうまくいかないようです。

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

これは機能するはずですが、機能しません...

Output:
    1
    2
    1
    2

私は何を間違えましたか?

18
Ed Manet

このように呼び出します:

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

,を使用する際の間違いは、PowerShellの Common Gotchason Stack Overflow で説明されています。

25
manojlds

ちなみに、PowerShellには値を交換するための特別な構文があり、$ tmpを使用する必要はありません。

$a,$b = $b,$a
23
Shay Levy

まず、あなたはそれを間違っていると言っています。 swapの呼び出しにコンマを入れることは、それらの配列を最初のパラメーターとしてオブジェクトに渡すことを意味します。あなたがそれを修正するとしたら...

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

...それでうまくいくでしょう。

3
Joel B Fant