這是所希望的效果:當兩者都是模塊時,是否可以向getfenv(2)添加函數?
-- in module: A
module(...)
require('B')
new_func('my_val') -- new_func is defined in "B"
-- in module: B
module(...)
getfenv(2).new_func = function() end -- this does not work
-- this does
getfenv(2).A.new_func = function() end
這比實際需要更多的好奇心。我希望通過這個深奧的問題來了解更多getfenv
的功能。
由於getfenv(2)
應該返回一個env,爲什麼getfenv(2).new_func
不能在上面的例子中工作?
我也不明白爲什麼getfenv(1) from A ~= getfenv(2) in B
。
(我也想避免使用debug
,包括debug.setupvalue)
其實,我知道'module'在全局環境中設置了一個帶有mod名稱的表。我似乎出錯的部分是'require'在不同的環境中評估模塊代碼,然後我期望的。所以'getfenv'返回了我在模塊B定義中不期望的東西。如果我在模塊B函數(而不是模塊B定義)中使用'getfenv',那麼一切都按我的想法運行。 –
另外值得指出的是,既然你可以[自定義](http://www.lua.org/manual/5.2/manual.html#6.3)地獄,'require'的作品,它可能不是一個好主意(或未來證明)依靠它所做的特定環境操作。 – idoby
非常真實。這就是爲什麼當'require'正在做生意時,我計劃*不*使用'getfenv'。 –