Import 如何将所有符号从lua模块导入全局命名空间?

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

在Python中,我们可以从math import*键入
,一次导入所有数学函数

我怎样才能在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