2009-12-02 8 views

答えて

4

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のようなものに行くつもりだった。

+0

Thx。なぜ私は関数を呼び出すためにドット演算子を使用する必要がありますか? (同じコンテキストを取得するには) –

+1

はい、関数は呼び出されたのと同じスコープ内で実行されます。 –

+5

キース、私たちは本当にブルースとジェフリーを打ち負かすと、より自然な構文になる必要があります。私はGetNewClosure()メソッドが嫌いです。それはとても不器用です。私は二重の括弧を使って考えていました:{{$ ix}}? – x0n

関連する問題