2
我要動態地使用模塊,我知道他們的名字,但創建一個模塊,然後使用這樣的應用:使用使用動態
using PyPlot
a = Module(:Plots)
using a
將產生錯誤時拋出告訴我,一個不definied。這是一個非常不直觀的錯誤信息,因爲當你在repl上這樣做時,你可以使用'a'。結合使用它會告訴你它沒有被定義。
我要動態地使用模塊,我知道他們的名字,但創建一個模塊,然後使用這樣的應用:使用使用動態
using PyPlot
a = Module(:Plots)
using a
將產生錯誤時拋出告訴我,一個不definied。這是一個非常不直觀的錯誤信息,因爲當你在repl上這樣做時,你可以使用'a'。結合使用它會告訴你它沒有被定義。
該錯誤消息是由Base.require
發出的,所以你應該使用using Main.a
或using .a
代替:
要求(模塊::符號)
此功能使用/進口實施的一部分,如果模塊不是已經在Main中定義的 。它也可以直接調用以強制重新加載模塊,而不管其是否已在之前加載(例如,在交互式開發庫時),而不管它是否爲 。 ... 當搜索文件,都需要先查找下Pkg.dir()包代碼,然後嘗試在全局變量LOAD_PATH路徑 。在所有平臺上都需要區分大小寫,包括那些不區分大小寫的文件系統(如macOS和Windows)的文件系統( )。
或者只是使用module
關鍵字來定義在飛行模塊:
module A
...
end
using A
對於現有的模塊,你也可以通過動態eval(using module-name)
使用它。
謝謝。 eval正是我想要的。 – Nozdrum
這裏提防'eval'。只能在REPL中或在未預編譯的包中使用它。預編譯不是爲這種動態使用而設計的。所以,如果你這樣做是爲了避免必須有一個軟件包作爲依賴......不要。 (另外,如果跳過Plots.jl依賴項,則不應該直接使用Plots.jl,而應該依賴於RecipesBase.jl)。 –
@ChrisRackauckas如果我不知道什麼是依賴關係(在編譯時),我該怎麼做呢? – Nozdrum