我想提供一个脚本块作为函数的参数。此脚本块应使用其参数之一更改父级中的局部变量。情况如下:

## function definition
function test {
    param( [scriptblock]$sb )
    $sb.Invoke( 5 )
}

## this is my local variable
$localVariable = 10

## update the local variable using a script block
test( { param( $m ) write-host "local: $localVariable"; $localVariable += 5 } )

调用似乎能够看到局部变量(它打印 10),但添加不会传播到父作用域。如何才能做到这一点?非常感谢!

最佳答案

如果父作用域是 scriptglobal 作用域,你可以这样做:

test { param( $m ) write-host "local: $localVariable"; $script:localVariable += 5 }

对于任意父作用域,试试这个:
test { param( $m ) write-host "local: $localVariable"; Set-Variable -Scope 1 -Name localVariable -Value ($localVariable += 5) }

您可能需要摆弄范围参数。当我从控制台执行此操作时,我必须使用 2 才能将 $localVariable 更改为全局变量。

关于powershell - 在脚本块的父作用域中更改局部变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26615155/

10-11 01:43