PowerShell: an elegant way to create closures

后端 未结 2 681
离开以前
离开以前 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条回答
  •  梦毁少年i
    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.

提交回复
热议问题