【发布时间】:2011-12-12 12:02:30
【问题描述】:
C++ 和 PHP 中的函数字面量都要求程序员从当前的词法上下文中指定他们使用的变量。这个要求背后的原因是什么?
我猜它不适合编译器/解释器,因为可以从函数字面量的主体中静态推断出这些信息。只是为了吸引读者的注意力吗?
【问题讨论】:
C++ 和 PHP 中的函数字面量都要求程序员从当前的词法上下文中指定他们使用的变量。这个要求背后的原因是什么?
我猜它不适合编译器/解释器,因为可以从函数字面量的主体中静态推断出这些信息。只是为了吸引读者的注意力吗?
【问题讨论】:
不能说 php 也不能说我 100% 得到了你的问题 - 但是...在 c++ 中,变量 total 参与了 lambda 函数闭包。这样做的主要前提是它可以改变它的价值,作为一个参考。
【讨论】:
至少对于 C++11,[=] () {...} 将自动拉入所有且仅拉入函数体使用的局部变量。 (或者,同样,[&]...)
如果您有任何超出此全部内容的特定需求,您可以通过引用或值指定要捕获的各个变量。
在 PHP 中,变量是在第一次使用它们的名称时创建的,所以我希望声明是确保没有新变量掩盖旧变量。有点像global 关键字。
【讨论】: