【问题标题】:access to global variables in lua在lua中访问全局变量
【发布时间】:2016-05-20 08:42:48
【问题描述】:

我在下面有一个 Lua 代码:

a, b = 1, 10
if a<b then
    print(a)
    local a
    print(a)
end
print(a, b)


只是一个小问题:

首先,我创建了一个全局变量 a = 1;

然后在 then 块中,我使用 全局变量 a 来打印它;

然后我声明了一个 local未初始化的变量 a因此其值为 nil

然后我的问题来了:在 then 块中创建 局部变量 a 后,我如何才能访问 全局变量 a,是这样吗?可能的 ?如果有,请给我答案:)

【问题讨论】:

  • 这听起来很混乱而且容易出错。
  • @Piglet 请看答案。这个问题是合乎逻辑的,所以有人可以回答。
  • 不是你的问题。我的意思是这样重用变量名。它很危险,代码变得难以阅读
  • @Piglet 我明白了,谢谢你的建议 :)
  • 一旦你完成了代码并希望尽可能地最小化它以重用这样的变量名,这有点道理,只有这么多的字母和单词,如果 lua 让我们重用他们中有一些。伟大的!虽然您正在测试和做这样的工作,但我建议使用更详细的变量名称以避免混淆。

标签: lua global-variables local-variables


【解决方案1】:

使用_ENV.a访问全局变量后使用同名的本地变量!

注意,Lua 5.1 及以下版本使用_G

编辑,刚刚测试了这个:

a, b = 1, 10
if a<b then
    local a = 12
    print(a) -- Will print 12
    print(_ENV.a) -- Will print 1
end
print(a, b) -- Will print 1 10

它工作得很好,给了我想要的输出引用 _ENV.a

【讨论】:

  • @Kershrew 我还有一个问题:如果我将 local 添加到第一行变量 a ,我怎么能做同样的事情?那可能吗 ?在这种情况下,第一个 a 将是整个块的本地(但不能通过 then 块中的 _ENV.a 或 _G.a 访问它),第二个 a 始终是 的本地b>然后阻止
  • @SWIIWII local 使变量设置在当前范围内。 _ENV 将始终访问您设置的顶级全局 a ,您可以使用本地变量进一步重用该变量名称。虽然老实说,我不知道你为什么不停止混淆自己并为变量使用不同的名称。 :)
  • @Kershrew 我在官方 lua 教程中找到了这段代码,我只想知道在所有可能的情况下局部和全局变量的所有用法,这只是出于好奇 :) 我当然知道对局部变量和全局变量使用相同的名称是很尴尬的:)
猜你喜欢
  • 2012-02-26
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
相关资源
最近更新 更多