我的目标:对于一个项目,可以琐碎甚至循环地包含本地文件(同一项目的一部分,相同的确切目录)。
在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”方式是什么?我看到很多帖子都说,“如果是这种情况,则您的代码可能是错误的”,我认为这只是一个愚蠢的主张。
答案 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)
函数可以使用在 自己的定义之后定义的类型,函数,常量,模块。