如何捕获循环内 lambda 闭包中的局部变量?

DDD
发布: 2024-11-10 12:52:03
原创
235 人浏览过

How do you capture local variables in lambda closures within loops?

循环中的 Lambda 闭包和变量作用域

在循环中定义 lambda 时,了解变量作用域的工作原理非常重要。在提供的代码片段中,循环内创建的每个 lambda 引用相同的变量 obj,该变量在每次迭代时都会修改。

默认范围解析

默认情况下, lambda 将从封闭范围捕获变量。在给定的代码中,封闭范围是循环块。因此,每个 lambda 有效地捕获 obj 的最后一个值。从不同范围调用 lambda 时,此行为可能会导致错误结果,因为它们可能没有预期值。

捕获局部变量

要解决此问题,您需要强制 lambda 捕获 obj 的当前值。这可以通过在 lambda 中引入一个在创建时绑定到 obj 的新局部变量来实现。以下代码片段演示了这种方法:

lambdas_list = []
for obj in obj_list:
    lambdas_list.append(lambda obj=obj: obj.some_var)
登录后复制

通过显式将 obj 作为参数传递给 lambda,我们为每个 lambda 创建一个新的局部变量。这确保每个 lambda 从循环迭代中捕获 obj 的本地值。因此,当您从另一个范围调用 lambda 时,它们将访问正确的值。

以上是如何捕获循环内 lambda 闭包中的局部变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板