2009-12-02 17 views

Respuesta

4

Se puede crear un functi en eso toma un scriptblock, llama a GetNewClosure y devuelve el cierre. Es esencial que se llama a esta función utilizando el operador punto ej .:

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

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

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

A {Write-Host 3} 

No estoy seguro es mucho mejor que simplemente llamando GetNewClosure() en el ScriptBlock sin embargo. Tenga en cuenta que puede elegir otro nombre para la función. Iba por algo más parecido a C# lambdas.

+0

Thx. ¿Por qué necesito usar el operador de punto para llamar a la función? (¿Para obtener el mismo contexto?) –

+1

Sí, así que la función se ejecuta dentro del mismo ámbito desde el que se llama. –

+5

Keith, realmente tenemos que vencer a bruce y jeffrey para obtener una sintaxis más natural. Odio el método GetNewClosure(). Es tan torpe Estaba pensando en utilizar llaves dobles: {{$ ix}}? – x0n

Cuestiones relacionadas