2017-06-15 138 views
2

我要動態地使用模塊,我知道他們的名字,但創建一個模塊,然後使用這樣的應用:使用使用動態

using PyPlot 
a = Module(:Plots) 
using a 

將產生錯誤時拋出告訴我,一個不definied。這是一個非常不直觀的錯誤信息,因爲當你在repl上這樣做時,你可以使用'a'。結合使用它會告訴你它沒有被定義。

回答

3

該錯誤消息是由Base.require發出的,所以你應該使用using Main.ausing .a代替:

要求(模塊::符號)

此功能使用/進口實施的一部分,如果模塊不是已經在Main中定義的 。它也可以直接調用以強制重新加載模塊,而不管其是否已在之前加載(例如,在交互式開發庫時),而不管它是否爲 。 ... 當搜索文件,都需要先查找下Pkg.dir()包代碼,然後嘗試在全局變量LOAD_PATH路徑 。在所有平臺上都需要區分大小寫,包括那些不區分大小寫的文件系統(如macOS和Windows)的文件系統( )。

或者只是使用module關鍵字來定義在飛行模塊:

module A 
... 
end 

using A 

對於現有的模塊,你也可以通過動態eval(using module-name)使用它。

+0

謝謝。 eval正是我想要的。 – Nozdrum

+0

這裏提防'eval'。只能在REPL中或在未預編譯的包中使用它。預編譯不是爲這種動態使用而設計的。所以,如果你這樣做是爲了避免必須有一個軟件包作爲依賴......不要。 (另外,如果跳過Plots.jl依賴項,則不應該直接使用Plots.jl,而應該依賴於RecipesBase.jl)。 –

+0

@ChrisRackauckas如果我不知道什麼是依賴關係(在編譯時),我該怎麼做呢? – Nozdrum