当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Lua:"必需"模块中的变量的范围是什么?》经验,为你挑选了1个好方法。

在花了一周学习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,他们最终会找到什么表?

访问所需文件范围的常用方法是什么?

lhf.. 7

既不是require也不dofile等同于include:在运行时运行代码,而不是在编译期间以文本方式添加源代码.

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

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



1> lhf..:

既不是require也不dofile等同于include:在运行时运行代码,而不是在编译期间以文本方式添加源代码.

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

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

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有