2011-08-22 40 views
13

我想在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 

我做了什么错?

回答

3

首先,你说错了。在调用swap中放置一个逗号意味着你将一个数组作为第一个参数传递给对象。如果你要纠正它...

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

......它会然后工作。

+0

您可以通过引用传递值类型。 – Rynant

+0

@Rynant:你说得对。我又做了,它没有抱怨价值类型。不知道我第一次做了什么不同。 –

20

顺便说一句,PowerShell提供了一种特殊的语法来交换价值,没有必要使用$ TMP:

$a,$b = $b,$a