我的目标:对于一个项目,能够简单地,可能循环地包含本地文件(同一项目的一部分,完全相同的目录)。
在 Julia 中,假设我有以下文件:
文件1.jl
module A
include("FILE2.jl")
using B
# Type annotations that need types from B
end
Run Code Online (Sandbox Code Playgroud)
文件2.jl
module B
include("FILE1.jl")
using A
# Type annotations that need types from A
end
Run Code Online (Sandbox Code Playgroud)
在 Julia (>v1) 中,这会导致无限循环。我尝试将文件添加到我的加载路径,以便我可以直接使用 using 或 import,但它仍然找不到它们。
假设循环依赖关系并且是同一项目的一部分,在同一目录中包含文件的“朱利安”方式是什么?我看到很多帖子都说“如果是这样,你的代码可能是错误的”,我认为这只是一个愚蠢的声明。
一种常见的结构是将所有includes 放在一个地方,位于项目的根部。Flux.jl就是一个很好的例子。
module如果项目非常大,人们习惯于细分他们的项目,但您不需要!一个大型项目可以由单个模块组成。如果作为一个孤立的整体有意义,我建议只将一大块代码拆分成它自己的模块。(其他人可能对此有不同的看法!)但是既然您询问了循环引用,那么听起来像单个模块更适合您的情况。
模块不能包含循环引用:
# will not work
module A
import ..B: y
x = 1
end
module B
import ..A: x
y = 1
end
Run Code Online (Sandbox Code Playgroud)
这不是函数的问题:
function a(x)
if x < 1
1
else
b(x-1) * 2
end
end
function b(x)
a(x)
end
b(10)
Run Code Online (Sandbox Code Playgroud)
函数可以使用在自己定义之后定义的类型、函数、常量、模块。