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

TN.*_*TN. 8 .net powershell closures

Keith Hill向我解释说,PowerShell中的块不是闭包,要从块创建闭包,我必须调用方法.GetNewClosure().

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

例:

{ block }
${ closure } # ???
Run Code Online (Sandbox Code Playgroud)

Kei*_*ill 4

您可以创建一个接受脚本块、调用 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}
Run Code Online (Sandbox Code Playgroud)

但不确定这比在脚本块上调用 GetNewClosure() 好得多。请注意,您可以为该函数选择其他名称。我想要一些更像 C# lambda 的东西。

  • 基思,我们确实需要击败布鲁斯和杰弗里,以提出更自然的语法。我讨厌 GetNewClosure() 方法。太笨拙了。我正在考虑使用双大括号: {{ $ix }} ? (5认同)
  • 请不要使用“{{...}}”。这是一个返回脚本块的脚本块。这是一个有效的场景。我在实践中使用它。 (3认同)