Keith Hill向我解释了blocks in PowerShell are not closures以及要从块创建闭包的方法,我必须调用方法.GetNewClosure()。
有没有优雅的方法从块创建闭包? (例如,创建一个包装函数,一个别名?,...)
示例:
{ block }
${ closure } # ???
答案 0 :(得分:4)
你可以创建一个带有scriptblock的函数,调用GetNewClosure并返回闭包。必须使用点运算符调用此函数,例如:
function =>([scriptblock]$_sb_)
{
$_sb_.GetNewClosure()
}
function A($block)
{
B (. => {Write-Host 2; &$block})
}
function B($block) {Write-Host 1;&$block}
A {Write-Host 3}
不确定这比仅在scriptblock上调用GetNewClosure()要好得多。请注意,您可以为该功能选择一些其他名称。我正在寻找更像C#lambdas的东西。
答案 1 :(得分:2)