簡體   English   中英

Julia:我如何從模塊內部訪問類型?

[英]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 Bmodule 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM