考虑以下两个文件:
function x()
return 1
end
-- return x
function x()
return 2
end
print( x() )
local y = require "a"
print( _G.x(), y )
print( x(), y() )
当我执行b.lua
时,我收到以下输出:
2
1 function: 0024B710
1 1
在我看来,这是错误的。来自x
的函数a.lua
应该存储为y
而不是覆盖b.lua
内的全局变量。我知道我可以在local
内使用a.lua
关键字来纠正这种行为。
我只是想知道这是不是不受欢迎的行为;如果不;如果require
也覆盖我的全局变量会有什么好处?
答案 0 :(得分:3)
它不能存储为y
,因为您不会将其归还(或者至少您已将其注释掉)。如果您将a.lua
代码更改为return function() return 1 end
,则应该按预期工作(或按照建议添加local
)。
通常,这就是您通常会看到以下模式的原因:
local function a() end
local function b() end
return {a = a, b = b}
您可以将其用作local y = require "mymodule"; print(y.a(), y.b())
或类似内容。
就它是否具有理想的行为而言,我认为require
是一个荣耀的dofile
的效果,它在全局命名空间中执行代码,导致覆盖您可能已经拥有的功能。