Julia 圆形包含

ast*_*bc1 1 julia

我的目标:对于一个项目,能够简单地,可能循环地包含本地文件(同一项目的一部分,完全相同的目录)。

在 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,但它仍然找不到它们。

假设循环依赖关系并且是同一项目的一部分,在同一目录中包含文件的“朱利安”方式是什么?我看到很多帖子都说“如果是这样,你的代码可能是错误的”,我认为这只是一个愚蠢的声明。

Fon*_*ons 5

一种常见的结构是将所有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)

函数可以使用自己定义之后定义的类型、函数、常量、模块。