【发布时间】:2017-07-17 07:54:21
【问题描述】:
例如,改变所需文件的环境?就我而言,我正在创建一个 DSL(领域特定语言)来构建行为树,如果我能做这样的事情会很好:
require "behaviortree"
return Sequence {
-- definition of tree
}
不使用节点名称污染全局命名空间,或使用类似的构造
require "behaviortree".init()
因为在我看来这有点难看。简单地在模块文件的主体中放置一个 setfenv 调用并不能满足我的要求,因为它只会在我第一次需要模块时调用,而不是每次都调用,因为 require 的模块缓存。
我想过在每次需要时清除模块的缓存,但这意味着我需要做类似的事情
require "behaviortrees"
local tree = Sequence {
-- definition of tree
}
create(tree)
并在创建函数中清除模块缓存。这也是我想避免的事情,但比调用模块的 init 函数更好。
是否有任何“干净”的方式使用模块来设置所需文件的环境?
【问题讨论】:
-
你可以用
dofile代替require。这根本不缓存,但只适用于 Lua 模块。 -
@HenriMenke 谢谢,我没想到。但如果可能的话,我真的很想保留 require “behaviortrees” 这一行,纯粹出于审美目的。
-
没有缓存
return false的模块,并且在每次require-调用时重新加载。 -
@siffiejoe 这实际上正是我想要的!万分感谢。如果不是评论,我会接受。