मैं एक उदाहरण पर अपने प्रश्न की व्याख्या करूंगा। के सी # में निम्न कोड करते हैं:पावरशेल: कार्यों को पैरामीटर के रूप में पास करने वाले ब्लॉक
void A(Action block)
{
B(() =>
{
Console.WriteLine(2);
block();
});
}
void B(Action block)
{
Console.WriteLine(1);
block();
}
void Main()
{
A(() =>
{
Console.WriteLine(3);
});
}
इस कोड के उत्पादन में है:
1
2
3
अब, मैं PowerShell में इस कोड लिखना चाहते हैं:
function A($block) {
B {
2
. $block
}
}
function B($block) {
1
. $block
}
A {
3
}
हालांकि, इस कोड कॉल गहराई ओवरफ़्लो का कारण बनता है:
स्क्रिप्ट विफल हुआ du ई गहराई अतिप्रवाह कॉल करने के लिए। कॉल गहराई 1001 पर पहुंच गया और अधिकतम 1000.
मैंने पाया है कि अगर मैं समारोह बी के पैरामीटर का नाम बदलने के लिए, यह काम करेगा।
क्या यह एक सुविधा या बग (या दोनों) है? मैं PowerShell में उस कार्य को अद्वितीय कार्यों के बिना अनूठे पैरामीटर के बिना कैसे कर सकता हूं?
Thx। ब्लॉक से बंद करने के लिए कोई मानक शॉर्टकट है (उदा। $ {})? –
नहीं। GetNewClosure() विधि एकमात्र तरीका है जिसके बारे में मुझे पता है। –
कीथ हिल आप मेरे नायक हैं! – bwerks