Go1.23 带来了在 go1.22 中实验的 range-over-func 功能,如果有人读过示例代码,你可能需要思考一下。不要那样做。 P'Yod会用非常简单的方式解释给你看
从带有范围子句的 For 语句规范开始,添加了 3 种类型的表达式:
我想添加一个变量来解释如下
规范中说,当我们使用函数 f 作为 rage 中的表达式时,每次在完成函数 f 之前调用yield 函数,我们都会在每个循环中得到结果。等于我们插入产量的值,当我解释它时我仍然很困惑。现在最好写代码
输出:
如果我们这样写代码,我们会得到2个完整的循环,因为根据规范,我们在f中调用了两次yield,这里我们将其命名为loop,它不会返回任何东西给我们。因为我们选择使用一个yield模式,根本不接受任何参数
另一个例子
输出:
这样我们也会得到2轮,因为我们调用了一次yield,现在range将返回2个值,分别是3和7,我们每次都用它们来调用yield
另一个例子
输出:
每次输入yield时,我们会得到3个循环,每次都会得到2个值
我们还可以通过插入任何类型的参数来调用yield,例如
现在我们了解了它的机制,当我们去阅读困难的例子时,我们会理解更多,比如Go Wiki中的例子:Rangefunc Experiment
主要
更容易阅读,对吧?最后,如何应用它取决于您。我们只看yield被调用了多少次。只有当你把它放在范围内时你才会得到它
至于会出来的值,就是掉入yield的值了
以上是Go 中的 range-over-func的详细内容。更多信息请关注PHP中文网其他相关文章!