PowerShell:一种创建闭包的优雅方式

时间:2009-12-02 10:17:48

标签: .net powershell closures

Keith Hill向我解释了blocks in PowerShell are not closures以及要从块创建闭包的方法,我必须调用方法.GetNewClosure()

有没有优雅的方法从块创建闭包? (例如,创建一个包装函数,一个别名?,...)

示例:

{ block }
${ closure } # ???

2 个答案:

答案 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)