在花了一周学习Lua之后,遇到这种奇怪的情况我感到有点震惊,因为我之前曾想过“require”命令就像C/C++中的#include一样(即,它由预处理器复制/粘贴) ). 显然情况并非如此. 这就是困扰我的
显然情况并非如此.
这就是困扰我的原因:
-- a.lua this_is_global = "I'm a global var!!" require "b" print(global_in_b) -- error??!! globals in b aren't truly global? -- b.lua print(this_is_global) -- prints "I'm a global var!" -- so b can see globals from a global_in_b = "Am I global too?"
出于生产率的原因,我刚刚创建了自己的表作为b中的作用域,添加了我想要访问该表的所有内容,然后在b中返回表以便我可以编写:
-- a.lua stuff_from_b = require "b" print(stuff_from_b.global_in_b) -- does what we want, in a weird way
我知道我也可以手动将b.lua中的东西添加到_G表中以强制它们是全局的,但这感觉很难看.
所以我的问题:
>在所需文件中“全局”会发生什么?如果不是_G,他们会在什么表中结束?
>访问所需文件范围的常用方法是什么?
所需文件看到的全局变量与需要它的文件中的全局变量相同.
为了避免污染并允许隐私和隐藏,Lua模块创建并返回他们想要导出到外部世界的表格是一种很好的做法.由模块的设计者决定从外部可以看到什么.