module - 冗余导出使用?
问题描述
是否有任何理由在稍后将包含在另一个文件中的文件(不包含模块)中使用“导出”?在查看 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 的范围内,从而完全没有必要使用“导出”?我在几个不同的包中看到了这种类型的东西,但并没有真正明白原因。
非常感谢您的任何帮助,
雷纳托
解决方案
这些export
s 不是多余的。这些export
s 不是关于Bar
导入的其他模块的范围,而是关于其他模块的范围Bar
。如果您Bar
通过using Bar
in 另一个模块或 in导入模块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
in的名称导出Bar
到导入该模块的其他模块Bar
。
您可以在 Julia 文档中找到有关导入、导出和模块系统的更多信息。
在一个模块中,您可以控制其他模块中的哪些名称是可见的(通过导入),并指定您的哪些名称是公开的(通过导出)。 https://docs.julialang.org/en/v1/manual/modules/index.html#modules-1
推荐阅读
- video - 我可以使用ffmpeg或ffprobe获取h.264每一帧的引用列表吗?
- r - 将图例添加到具有两个系列的 ggplot geom_point/geom_errorbar 图
- ruby-on-rails - 退出 api 或任何需要身份验证标头的 api 在 Rails Api 应用程序中的 Rspec/Rswag 中不起作用
- vba - Catia VBA中的用户定义类型未定义错误
- wordpress - 在 WooCommerce 中根据 productID 应用 remove_action
- wp-cli - 使用 wp 插件安装时添加到插件名称的后缀
- r - 将 CCF 应用于文件夹中的所有文件并使用结果创建新表
- python-3.x - ttk Treeview,滚动到视图后获取项目的bbox
- python - 为什么给出命令后我的代码没有打印任何内容?
- node.js - 无法使用 Ejs 模板制作待办事项列表应用程序