Передача по ссылке через несколько функций? - PullRequest
1 голос
/ 25 сентября 2019

В PowerShell не представляется возможным передавать переменные по ссылке через несколько функций.Есть ли способ сделать это?Приведенный ниже код не работает:

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

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

$refvar = "junk"

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

Вывод:

junk

1 Ответ

0 голосов
/ 26 сентября 2019

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