gpt4 book ai didi

lua - Lua中关于 “local foo = foo”成语的解释

转载 作者:行者123 更新时间:2023-12-04 17:34:21 24 4
gpt4 key购买 nike

在 Roberto Ierusalimschy 的 Programming in Lua(第 3 版)中指出

A common idiom in Lua is

local foo = foo

This code creates a local variable, foo, and initializes it with the value of the global variable foo. (The local foo becomes visible only after its declaration.) This idiom is useful when the chunk needs to preserve the original value of foo even if later some other function changes the value of the global foo; it also speeds up the access to foo.



有人可以更详细地解释这一点并提供一个简单的例子吗?

目前,我能想到的这个习惯用法的唯一用途是管理与全局变量同名的局部变量(在给定的 block 中),以便全局变量在 block 之后保持不变。

一个例子:
foo = 10
do
local foo = foo
foo = math.log10(foo)
print(foo)
end
print(foo)

这给出了:
1
10

但是完全不使用这个成语也可以做到这一点:
bar = 10
do
local bar = math.log10(bar)
print(bar)
end
print(bar)

这给出了相同的结果。所以我的解释似乎站不住脚。

最佳答案

我已经看到这更多地被用作一种优化技术,而不是一种保留原始值的方法。使用标准 Lua 解释器,每个全局变量访问和模块访问都需要一个表查找。另一方面,局部变量在字节码编译时具有静态已知的位置,并且可以放置在 VM 寄存器中。

更深入:Why are local variables accessed faster than global variables in lua?

关于lua - Lua中关于 “local foo = foo”成语的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28489970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com