2009-12-02 5 views

risposta

4

Si potrebbe creare un functi su quello prende uno scriptblock, chiama GetNewClosure e restituisce la chiusura. E 'essenziale che si chiama questa funzione utilizzando l'operatore punto ad es .:

function =>([scriptblock]$_sb_) 
{ 
    $_sb_.GetNewClosure() 
} 

function A($block) 
{ 
    B (. => {Write-Host 2; &$block}) 
} 

function B($block) {Write-Host 1;&$block} 

A {Write-Host 3} 

Non è sicuro questo è molto meglio di un semplice chiamare GetNewClosure() sul scriptblock però. Nota puoi scegliere un altro nome per la funzione. Stavo andando per qualcosa di più come C# lambda.

+0

Thx. Perché devo usare l'operatore punto per chiamare la funzione? (Per ottenere lo stesso contesto?) –

+1

Sì, quindi la funzione viene eseguita nello stesso ambito da cui viene chiamata. –

+5

Keith, abbiamo davvero bisogno di battere Bruce e Jeffrey in una sintassi più naturale. Odio il metodo GetNewClosure(). È così maldestro. Stavo pensando di usare doppie parentesi: {{$ ix}}? – x0n