Lua:“必需”模块中的变量的范围是什么?

在花了一周学习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,他们会在什么表中结束?
>访问所需文件范围的常用方法是什么?

解决方法

要求和dofile都不等同于包括:在运行时运行代码,而不是在编译期间以文本方式添加源代码.

所需文件看到的全局变量与需要它的文件中的全局变量相同.

为了避免污染并允许隐私和隐藏,Lua模块创建并返回他们想要导出到外部世界的表格是一种很好的做法.由模块的设计者决定从外部可以看到什么.

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...