Julia:我如何从模块内部访问类型?

时间:2016-08-18 17:44:00

标签: types module julia

假设我想从模块内部访问一个englobing范围的类型。具体来说:

档案Englobing.jl

"Proxy Pattern" vs "Proxy"

file myModule.jl

using myModule
type MyType
    a::Float64
    b::Vector{Float64}
end

t = MyType( 1., [ 1., 2. ] )

x = [ .5, .5 ]

myFunc( x, t )

在这种情况下,我希望能够从模块myModule中访问MyType类型,而不使用module myModule export myFunc function myFunc( x::Vector{Float64}, z::MyType ) [ operations ] end end s。

2 个答案:

答案 0 :(得分:3)

选项1:

您也可以导出类型。例如。如果struct是一个模块,您可以:

Englobing.jl

然后,在您的export MyType 文件中,您可以:

myModule.jl

选项2

如果using Englobing 不是一个模块(目前还没有编写),你可以使用

Englobing.jl

include("Englobing.jl") 内。

然而,这两方面都依赖于MyModule.jl同时使用来自Englobing.jl的某些内容(功能,类型,对象等)MyModule.jl的情况。使用MyModule.jl中的内容。如果期望的结果是有可能出现这样的情况,我不相信这在朱莉娅是可以实现的,尽管我不太明白为什么它也是可取的。

答案 1 :(得分:2)

我们尽量避免隐含的依赖关系,即说"给我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的不同定义。但是,首选只需要一个干净的模块依赖树。