2017-07-16 66 views
1

例如,要更改需求文件的環境?就我而言,我創建構建行爲樹DSL(領域特定語言),這將是很好,如果我可以做這樣的事情:有沒有辦法在Lua 5.1中每次需要模塊時調用函數?

require "behaviortree" 

return Sequence { 
    -- definition of tree 
} 

,不污染與節點名稱全局命名空間,或使用構造像

require "behaviortree".init() 

因爲這在我看來有點醜。簡單地將一個setfenv調用放在模塊文件的主體中並沒有達到我想要的,因爲只有當我第一次需要模塊時纔會調用setfenv調用,而不是每次都需要模塊緩存。

我想過清理出每次我需要它的時候模塊的高速緩存,但是這意味着我需要做的是這樣

require "behaviortrees" 

local tree = Sequence { 
    -- definition of tree 
} 

create(tree) 

並清除緩存模塊中創建函數。這也是我想避免的,但是比調用模塊的init函數更好。

是否有任何'乾淨'的方式來使用模塊來設置所需文件的環境?

+0

你可以'dofile'而不是'require'。這根本不會緩存,但只適用於Lua模塊。 –

+0

@亨利梅克謝謝,我沒有想到這一點。但是,如果可能的話,我真的很希望保留所要求的「行爲主義」路線,純粹爲了美學目的。 –

+2

「返回false」的模塊沒有被緩存,並且在每個「require」調用時重新加載。 – siffiejoe

回答

2

編寫自己的require函數,使用「原始」require加載模塊,然後調用您需要的函數init。即使「原始」要求返回緩存版本,您自己的require函數仍將調用init函數。

相關問題