首页 > 解决方案 > 通过多个函数通过引用传递?

问题描述

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

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

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

$refvar = "junk"

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

输出:

垃圾

标签: powershellpass-by-reference

解决方案


函数f1f2期望引用作为参数值。当参数值[ref]$out传入f1时,$out现在是该函数范围内的引用。因此,您只需要传入's 范围$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

推荐阅读