c# – PowerShell:将块作为参数传递给函数
发布时间:2020-12-15 06:47:30 所属栏目:百科 来源:网络整理
导读:我将以一个例子来解释我的问题.我们在C#中有以下代码: void A(Action block){ B(() = { Console.WriteLine(2); block(); });}void B(Action block){ Console.WriteLine(1); block();}void Main(){ A(() = { Console.WriteLine(3); });} 此代码的输出是: 12
我将以一个例子来解释我的问题.我们在C#中有以下代码:
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 } 但是,此代码会导致调用深度溢出:
我发现如果我更改函数B的参数的名称,它将工作. 这是一个功能还是一个错误(或两者兼有)?如何在PowerShell中进行这项工作,而不必在功能之间拥有独特的参数? 解决方法
是的,你将递归,因为传递到函数B中的脚本块中的$block引用在函数B的上下文中进行求值,结果计算为B的$block参数的值.
如果您不想更改参数名称(不要怪你),可以强制PowerShell在A中创建一个新的闭包,以捕获函数A中$block的值,例如: function A($block) { B {Write-Host 2; &$block}.GetNewClosure() } function B($block) { Write-Host 1 &$block } A {Write-Host 3} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |