【发布时间】:2009-12-02 10:17:47
【问题描述】:
Keith Hill 向我解释了 blocks in PowerShell are not closures 并且要从块中创建闭包,我必须调用方法 .GetNewClosure()。
有没有什么优雅的方法可以从块中创建闭包? (例如,创建一个包装函数,一个别名?,...)
例子:
{ block }
${ closure } # ???
【问题讨论】:
标签: .net powershell closures
Keith Hill 向我解释了 blocks in PowerShell are not closures 并且要从块中创建闭包,我必须调用方法 .GetNewClosure()。
有没有什么优雅的方法可以从块中创建闭包? (例如,创建一个包装函数,一个别名?,...)
例子:
{ block }
${ closure } # ???
【问题讨论】:
标签: .net powershell closures
您可以创建一个接受脚本块、调用 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}
不确定这是否比仅在脚本块上调用 GetNewClosure() 好得多。请注意,您可以为该函数选择其他名称。我想要一些更像 C# lambdas 的东西。
【讨论】:
{{...}}。这是一个返回脚本块的脚本块。这是一个有效的场景。我在实践中使用它。