require 语句正在覆盖 lua 中的全局变量
A require statement is overwriting global variables in lua
考虑以下两个文件:
a.lua
function x()
return 1
end
-- return x
b.lua
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
我认为这是错误的。 a.lua
中的函数 x
应该存储为 y
而不是覆盖 b.lua
中的全局变量。我知道我可以通过在 a.lua
.
中使用 local
关键字来纠正这种行为
我只是想知道这是否是不良行为;如果不;如果 require
也覆盖我的全局变量有什么好处?
它不能存储为 y
,因为您没有 return 它(或者至少您已将其注释掉)。如果您将 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
,它执行全局命名空间中的代码并导致覆盖您的函数可能已经有了。
考虑以下两个文件:
a.lua
function x()
return 1
end
-- return x
b.lua
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
我认为这是错误的。 a.lua
中的函数 x
应该存储为 y
而不是覆盖 b.lua
中的全局变量。我知道我可以通过在 a.lua
.
local
关键字来纠正这种行为
我只是想知道这是否是不良行为;如果不;如果 require
也覆盖我的全局变量有什么好处?
它不能存储为 y
,因为您没有 return 它(或者至少您已将其注释掉)。如果您将 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
,它执行全局命名空间中的代码并导致覆盖您的函数可能已经有了。