【问题标题】:PowerShell pass by reference not working for mePowerShell 通过引用传递对我不起作用
【发布时间】:2018-12-28 21:16:09
【问题描述】:

我正在尝试在 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

我做错了什么?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    这样调用:

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

    使用,的错误在Common Gotchas for PowerShell here on Stack Overflow中有描述。

    【讨论】:

      【解决方案2】:

      顺便说一句,PowerShell 有一种特殊的语法来交换值,并且不需要使用 $tmp:

      $a,$b = $b,$a
      

      【讨论】:

        【解决方案3】:

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

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

        ...它会工作。

        【讨论】:

        • 可以通过引用传递值类型。
        • @Rynant:你是对的。我又做了一遍,它没有抱怨值类型。不知道我第一次做了什么不同。
        猜你喜欢
        • 2018-04-14
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 2011-03-18
        • 2018-06-20
        相关资源
        最近更新 更多