Explicaré mi pregunta en un ejemplo. Tengamos siguiente código en C#:PowerShell: pasar bloques como parámetros a las funciones
void A(Action block)
{
B(() =>
{
Console.WriteLine(2);
block();
});
}
void B(Action block)
{
Console.WriteLine(1);
block();
}
void Main()
{
A(() =>
{
Console.WriteLine(3);
});
}
La salida de este código es:
1
2
3
Ahora, quiero escribir este código en PowerShell:
function A($block) {
B {
2
. $block
}
}
function B($block) {
1
. $block
}
A {
3
}
Sin embargo, este código provoca un desbordamiento de profundidad de llamada:
El guion falló du e para llamar a profundidad desbordamiento. La profundidad llamada alcanzó 1001 y el máximo es 1000.
He encontrado que si cambio el nombre del parámetro de la función B, que va a funcionar.
¿Es una característica o un error (o ambas cosas)? ¿Cómo puedo hacer que funcione en PowerShell sin tener parámetros únicos en todas las funciones?
Thx. ¿Hay algún atajo estándar para crear cierres desde bloques (por ejemplo, $ {})? –
No. El único método que conozco es el método GetNewClosure(). –
Keith Hill eres mi héroe! – bwerks