[英]Julia: How can I access a type from inside a module?
假設我想從模塊內部訪問一個在englobing范圍內的類型。 具體來說:
文件Englobing.jl
using myModule
type MyType
a::Float64
b::Vector{Float64}
end
t = MyType( 1., [ 1., 2. ] )
x = [ .5, .5 ]
myFunc( x, t )
文件myModule.jl
module myModule
export myFunc
function myFunc( x::Vector{Float64}, z::MyType )
[ operations ]
end
end
在這種情況下,我希望能夠從模塊myModule中訪問MyType類型,而不使用global
s。
選項1:
您也可以導出類型。 例如,如果Englobing.jl
是一個模塊,你可以:
export MyType
然后,在myModule.jl
文件中,您可以:
using Englobing
選項2
如果Englobing.jl
不是一個模塊(它當前沒有編寫),你可以使用
include("Englobing.jl")
在MyModule.jl
。
然而,這兩者都依賴於沒有Englobing.jl
使用來自MyModule.jl
東西(函數,類型,對象等)同時MyModule.jl
使用來自Englobing.jl
東西的Englobing.jl
。 如果期望的結果是有可能的情況,我不相信這在朱莉婭是可以實現的,盡管我不太明白為什么它也是可取的。
我們試圖避免隱式依賴,即說“給我任何MyType
定義可能就在身邊”。 你必須准確地說出它的來源。
但是,兩個模塊可以相互使用。 module A
可以包含using B
, module B
可以包含using A
您必須在每個語句中對語句進行排序,以便在加載另一個語句時可以加載一個語句,但它可以正常工作。 當然,這是不贊成的,因為兩個相互依賴的模塊並沒有以一種有意義的方式真正分開。
另一種解決方案是將一個模塊放在另一個模塊內。 可以從圍繞模塊本身代碼的作用域導入變量:
module Outer # or just Main, the default
type MyType
...
end
module myModule
import ..MyType # imports from the outer module
end
using .myModule
end
正如邁克爾所說,您可以將myModule
的代碼放在一個單獨的文件中,並將其include
在不同的位置,以自動選擇不同的MyType
定義。 但是,最好只有一個干凈的模塊依賴樹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.