【发布时间】:2020-09-15 21:05:42
【问题描述】:
我的目标:对于一个项目,能够包含本地文件(同一个项目的一部分,完全相同的目录),很简单,可能是循环的。
在 Julia 中,假设我有文件:
FILE1.jl
module A
include("FILE2.jl")
using B
# Type annotations that need types from B
end
文件2.jl
module B
include("FILE1.jl")
using A
# Type annotations that need types from A
end
在 Julia (>v1) 中,这会导致无限循环。我已经尝试将文件添加到我的加载路径,以便我可以直接使用 using 或 import,但它仍然找不到它们。
假设循环依赖,将文件包含在同一目录中的“朱利安”方式是什么,并且是同一项目的一部分?我看到很多帖子都说“如果是这种情况,你的代码可能是错误的”,我认为这只是一个愚蠢的说法。
【问题讨论】:
-
澄清一下:我认为您在这里混淆了两个概念。模块本质上是命名空间。它们与文件没有多大关系:单个 Julia 源文件可以定义多个模块,或者单个 Julia 模块可以将其实现拆分为多个文件。我提到这一点是因为您似乎习惯了 Python,其中 (AFAIU) 大多数时间在源文件和模块之间存在直接的、一对一的映射。 docs.julialang.org/en/v1/manual/noteworthy-differences 中提到了这一点以及 Python 和 Julia 之间的其他差异
-
您能解释一下为什么会出现这种循环依赖吗?换句话说,两个文件/模块以哪种方式相互依赖?
-
我更新了格式化问题,以更好地反映我正在尝试做的事情。如果我在当前环境中注册了我的包,是否可以在不使用 include 的情况下找到它?
-
作为更新 - 我不希望每个文件包含多个模块的文件。最终,我想要一个模块来定义一个或几个抽象类型,然后定义一些扩展这种类型的具体结构以及一些方法。具体结构的字段可能依赖于其他模块中定义的抽象类型,并且可能是循环的。
标签: julia