【问题标题】:Pass by reference through multiple functions?通过多个函数通过引用传递?
【发布时间】:2020-01-25 22:56:22
【问题描述】:

在 PowerShell 中,似乎无法通过多个函数通过引用传递变量。有没有办法做到这一点?下面的代码不起作用:

function f1([ref]$out){
    f2 ([ref]$out)   
}

function f2([ref]$out){
    $out.Value = "f2out"
}

$refvar = "junk"

f1 ([ref]$refvar)
Write-Host $refvar

输出:

垃圾

【问题讨论】:

  • 既然 f1 被传递一个引用,那么 f2 应该只传递一个值,它已经是一个引用。 f2($out)。否则,您只是在引用一个引用。
  • 谢谢你,笨蛋。我应该意识到这一点。

标签: powershell pass-by-reference


【解决方案1】:

函数f1 和f2 期望引用作为参数值。当参数值[ref]$out 传递到f1 时,$out 现在是该函数范围内的引用。因此,您只需要将$out 传递给f1 范围内的被调用函数即可。

function f1([ref]$out){
 f2($out)   
}

function f2([ref]$out){
    $out.Value = "f2out"
}

$refvar = "junk"
f1([ref]$refvar)
$refvar
# Output
f2out

如果您添加一些调试代码,您可以在 f1 中看到这种情况。

function f1([ref]$out){
    $out.GetType()
    $out
}

$refvar = 'junk'
f1([ref]$refvar)

# Output

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
False    False    PSReference`1                            System.Management.Automation.PSReference

Value : junk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2016-01-16
    相关资源
    最近更新 更多