Keith Hill私にはblocks in PowerShell are not closuresと私はメソッド.GetNewClosure()を呼び出す必要がありますブロックからクロージャを作成することを説明しました。PowerShell:閉鎖を作成するためのエレガントな方法
ブロックからクロージャを作成する上品な方法はありますか?
{ block }
${ closure } # ???
Keith Hill私にはblocks in PowerShell are not closuresと私はメソッド.GetNewClosure()を呼び出す必要がありますブロックからクロージャを作成することを説明しました。PowerShell:閉鎖を作成するためのエレガントな方法
ブロックからクロージャを作成する上品な方法はありますか?
{ block }
${ closure } # ???
functiその上でスクリプトブロックをとり、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#lambdaのようなものに行くつもりだった。
これらのリンクは、彼らが2.0
例(例えば...ラッピング機能、エイリアスを作成します?)
Thx。なぜ私は関数を呼び出すためにドット演算子を使用する必要がありますか? (同じコンテキストを取得するには) –
はい、関数は呼び出されたのと同じスコープ内で実行されます。 –
キース、私たちは本当にブルースとジェフリーを打ち負かすと、より自然な構文になる必要があります。私はGetNewClosure()メソッドが嫌いです。それはとても不器用です。私は二重の括弧を使って考えていました:{{$ ix}}? – x0n