PowerShell中Foreach方法内return未按预期跳出函数的差异问题
两段代码运行结果差异的核心原因
本质是return语句的作用域不同,这是PowerShell中.Foreach()扩展方法和原生foreach关键字循环的典型区别:
- 第一段代码调用的是集合的
.Foreach()扩展方法:
该方法接收的{}包裹的内容是独立的脚本块,脚本块内的return仅会终止当前次脚本块的执行,进入下一个分组的迭代,完全不会跳出外层的FirstNonRepeatingLetter静态方法。
因此代码会遍历全部分组,打印所有计数为1的分组Key,遍历结束后才会执行方法末尾的return "~~~",最终返回值为~~~,和预期不符。 - 第二段代码使用的是PowerShell原生
foreach关键字循环:
该循环属于方法内部的逻辑结构,不是独立脚本块,循环内的return会直接终止整个FirstNonRepeatingLetter方法的执行,将匹配到的第一个符合要求的Key直接返回,因此运行结果符合预期。
内容的提问来源于stack exchange,提问作者Алексей Семенов
相关产品推荐
相关产品推荐

