PowerShell передача по ссылке не работает - PullRequest
15 голосов
/ 22 августа 2011

Я пытаюсь сделать простую функцию обмена в 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

Что я сделал не так?

Ответы [ 3 ]

25 голосов
/ 22 августа 2011

Звоните так:

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

Ошибка использования , описана в Распространенных ошибках для PowerShell здесь, при переполнении стека .

22 голосов
/ 22 августа 2011

Кстати, PowerShell имеет специальный синтаксис для обмена значениями, и нет необходимости использовать $ tmp:

$a,$b = $b,$a
3 голосов
/ 22 августа 2011

Во-первых, вы называете это неправильно.Ввод запятой в вызове swap означает, что вы передаете их массив объектам в качестве первого параметра.Если бы вы исправили это ...

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

... тогда это сработало бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...