.net PowerShell:创建闭包的优雅方式

.net PowerShell:创建闭包的优雅方式,.net,powershell,closures,.net,Powershell,Closures,向我解释,要从块创建闭包,我必须调用方法 有什么优雅的方法可以从块创建闭包吗?(例如,创建包装函数、别名?,…) 例如: { block } ${ closure } # ??? 这些链接可能会对他们讨论PowerShell 2.0中的闭包有所帮助 您可以创建一个函数,该函数接受scriptblock,调用GetNewClosure并返回闭包。必须使用点运算符调用此函数,例如: function =>([scriptblock]$_sb_) { $_sb_.GetNewCl

向我解释,要从块创建闭包,我必须调用方法

有什么优雅的方法可以从块创建闭包吗?(例如,创建包装函数、别名?,…)

例如:

{ block }
${ closure } # ???

这些链接可能会对他们讨论PowerShell 2.0中的闭包有所帮助


您可以创建一个函数,该函数接受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的东西。

Thx。为什么我需要使用点运算符来调用函数?(为了获得相同的上下文?)是的,因此函数在调用它的相同范围内执行。Keith,我们真的需要打败bruce和jeffrey,让他们想出更自然的语法。我讨厌GetNewClosure()方法。太笨拙了。我在考虑使用双大括号:{{$ix}?请不要
{{…}}
。这是一个返回脚本块的脚本块。这是一个有效的方案。我在实践中使用它。