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