朱莉娅·循环包含

时间:2020-09-15 21:05:42

标签: julia

我的目标:对于一个项目,可以琐碎甚至循环地包含本地文件(同一项目的一部分,相同的确切目录)。

在Julia中,说我有文件:

FILE1.jl

module A

include("FILE2.jl")
using B

# Type annotations that need types from B

end

FILE2.jl

module B

include("FILE1.jl")
using A

# Type annotations that need types from A

end

在Julia(> v1)中,这导致无限循环。我尝试将文件添加到我的加载路径,以便可以直接使用using或import,但仍然找不到它们。

假设循环依赖,并且属于同一项目的一部分,在同一目录中包括文件的“ Julian”方式是什么?我看到很多帖子都说,“如果是这种情况,则您的代码可能是错误的”,我认为这只是一个愚蠢的主张。

1 个答案:

答案 0 :(得分:5)

一种常见的结构是将所有include放在项目根目录中的一个位置。 Flux.jl是一个很好的例子。

如果项目很大,人们可以使用module对其进行细分,但是您不必这样做!一个大型项目可以包含一个模块。我建议仅将代码块作为整体 isolated 有意义,才将其拆分为自己的模块。 (其他人对此可能有不同的看法!)但是,由于您询问了循环引用,因此听起来像一个模块更适合您的情况。

模块不能包含循环引用:

# will not work
module A
    import ..B: y
    x = 1
end
module B
    import ..A: x
    y = 1
end

这不是函数的问题:

function a(x)
    if x < 1
        1
    else
        b(x-1) * 2
    end
end

function b(x)
    a(x)
end

b(10)

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