是否有任何理由要在稍后将包含在另一个文件中的文件(不包含模块)中使用“导出”?在GitHub上查看某些软件包时,我遇到了这种类型的导出用法,这让我感到奇怪。例如,考虑Foo.jl:
# Foo.jl
export foo1
function foo1()
do something
end
function foo2()
do something
end
Bar.jl中包含哪些
# Bar.jl
module Bar
include("Foo.jl")
other stuff
end
函数foo2()是否不属于Bar的范围,因此完全不需要使用“导出”吗?我在几种不同的包装中看到了这种类型的东西,但并没有真正了解原因。
非常感谢您的帮助,
Renato
答案 0 :(得分:2)
这些export
不是多余的。这些export
与Bar
的范围无关,而是与导入Bar
的其他模块的范围有关。如果您通过Bar
在另一个模块或using Bar
中导入模块Main
,则名称foo1
将是公用的,因此您只需要写foo1
没有限定符即可访问函数foo1
而不是Bar.foo1
。
如果从export
中删除该Foo.jl
语句,您将看到发出foo1
之后,如果没有模块名称限定,就无法再访问函数using Bar
。您必须编写Bar.foo1
或通过foo1
或using Bar: foo1
显式使import Bar: foo1
在该模块中可见。
include
语句仅使Julia对该模块中的代码进行评估,因此您可以认为Bar.jl
就像是
# Bar.jl
module Bar
export foo1
function foo1()
do something
end
function foo2()
do something
end
other stuff
end
因此,export
语句将foo1
中的Bar
的名称导出到导入模块Bar
的其他模块。
您可以在Julia文档中找到有关导入,导出和模块系统的更多信息。
在一个模块中,您可以控制其他模块中的哪些名称是 可见(通过导入),并指定要使用的姓名 公开(通过出口)。 https://docs.julialang.org/en/v1/manual/modules/index.html#modules-1