Функции 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