PowerShell: an elegant way to create closures

后端 未结 2 682
离开以前
离开以前 2021-02-15 10:45

Keith Hill explained me that blocks in PowerShell are not closures and that to create closures from blocks I have to call method .GetNewClosure().

Is there any elegant w

相关标签:
2条回答
  • 2021-02-15 10:59

    You could create a function that takes a scriptblock, calls GetNewClosure and returns the closure. It is essential that you call this function using the dot operator e.g.:

    function =>([scriptblock]$_sb_)
    {
        $_sb_.GetNewClosure()
    }
    
    function A($block) 
    {
        B (. => {Write-Host 2; &$block})
    }
    
    function B($block) {Write-Host 1;&$block}
    
    A {Write-Host 3}
    

    Not sure this is much better than just calling GetNewClosure() on the scriptblock though. Note you can pick some other name for the function. I was going for something more like C# lambdas.

    0 讨论(0)
  • 2021-02-15 11:03

    These links might be of some help they talk about closures in PowerShell 2.0

    • http://blogs.msdn.com/powershell/archive/2009/03/27/get-closure-with-getnewclosure.aspx
    • http://www.nivot.org/2009/03/28/PowerShell20CTP3ModulesInPracticeClosures.aspx
    0 讨论(0)
提交回复
热议问题