当前位置 : 主页 > 网络编程 > lua >

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

来源:互联网 收集:自由互联 发布时间:2021-06-23
在花了一周学习Lua之后,遇到这种奇怪的情况我感到有点震惊,因为我之前曾想过“require”命令就像C/C++中的#include一样(即,它由预处理器复制/粘贴) ). 显然情况并非如此. 这就是困扰我的
在花了一周学习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模块创建并返回他们想要导出到外部世界的表格是一种很好的做法.由模块的设计者决定从外部可以看到什么.

网友评论