例如,要更改require文件的环境?在我的例子中,我正在创建一个用于构建行为树的DSL(领域特定语言),如果我可以做这样的事情会很好:
require "behaviortree"
return Sequence {
-- definition of tree
}
不使用节点名称或使用类似
的构造来污染全局命名空间require "behaviortree".init()
因为在我看来这有点难看。简单地将一个setfenv调用放在模块文件的主体中并不能满足我的需要,因为它只会在我第一次需要模块时调用,而不是每次都因为require的模块缓存而调用。
我想过每次需要时清除模块的缓存,但这意味着我需要做类似的事情
require "behaviortrees"
local tree = Sequence {
-- definition of tree
}
create(tree)
并清除create function中的模块缓存。这也是我想避免的,但是比调用模块的init函数更好。
使用模块设置需求文件的环境是否有“干净”的方式?
答案 0 :(得分:2)
编写您自己的require
函数,使用“原始”需求加载模块,然后调用您需要的init
函数。即使“原始”要求返回缓存版本,您自己的require
函数仍会调用init
函数。