Import 如何将所有符号从lua模块导入全局命名空间?
在Python中,我们可以从math import*键入Import 如何将所有符号从lua模块导入全局命名空间?,import,module,lua,love2d,Import,Module,Lua,Love2d,在Python中,我们可以从math import*键入,一次导入所有数学函数 我怎样才能在Lua做类似的事情?我想从数学,爱.图形,爱.音频等导入所有符号,以方便编写小型实验程序 我知道这是不赞成的。在写问题时,我想出了一种从模块导入所有符号的方法: function use(module, ...) for k,v in pairs(module) do if _G[k] then io.stderr:write("use: skip
,一次导入所有数学函数
我怎样才能在Lua做类似的事情?我想从数学
,爱.图形
,爱.音频
等导入所有符号,以方便编写小型实验程序
我知道这是不赞成的。在写问题时,我想出了一种从模块导入所有符号的方法:
function use(module, ...)
for k,v in pairs(module) do
if _G[k] then
io.stderr:write("use: skipping duplicate symbol ", k, "\n")
else
_G[k] = module[k]
end
end
end
用法示例:
require "use"
use(math)
use(love.graphics)
print(sin(pi/6))
function love.draw()
setColor(1, 0, 0)
circle("fill", 300, 300, 100)
end
我的答案是:不要。您可能只是放弃了使Lua require系统如此优秀的封装。请注意,在Python中,每个模块都有自己的全局名称空间,因此将符号从模块导入全局完全是本地决定。在Lua中,全局名称空间是全局的(除非您显式地为每个脚本提供自己的环境);每个脚本都共享它。如果从模块导入“所有符号”,则每个脚本也会获得这些符号。这不是“不赞成”;它使用错误的语言使用了错误的工具。我建议使用警告,而不是stderr,这样你可以更轻松地打开或关闭它:d(这实际上更像是一个警告而不是实际错误)如何“导入”函数调试.debug()
?@DarkWiiPlayer,我本来打算使用警告,但它在Love2D中对我不起作用,可能他们使用的是旧的Lua或其他东西。@EgorSkriptunoff,即use()
函数不会破坏现有符号,但您可以执行特殊情况导入,例如dbg=debug.debug
。