无法在Julia中实例化具体类

无法在Julia中实例化具体类,julia,Julia,我刚刚开始学习Julia,并定义了一个模块,如下所示: MyModule.jl module MyModule export ConcreteClass end abstract MyAbstract type ConcreteClass <: MyAbstract end module MyModule export ConcreteClass include("concrete.jl") end include("generics.jl") type ConcreteClas

我刚刚开始学习Julia,并定义了一个模块,如下所示:

MyModule.jl

module MyModule
export ConcreteClass
end
abstract MyAbstract
type ConcreteClass <: MyAbstract

end
module MyModule
export ConcreteClass
include("concrete.jl")
end
include("generics.jl")
type ConcreteClass <: MyAbstract

end
然后我有一个文件,它定义了一些简单的抽象类:

generics.jl

module MyModule
export ConcreteClass
end
abstract MyAbstract
type ConcreteClass <: MyAbstract

end
module MyModule
export ConcreteClass
include("concrete.jl")
end
include("generics.jl")
type ConcreteClass <: MyAbstract

end
在此之后,我尝试继承该类:

混凝土。jl

module MyModule
export ConcreteClass
end
abstract MyAbstract
type ConcreteClass <: MyAbstract

end
module MyModule
export ConcreteClass
include("concrete.jl")
end
include("generics.jl")
type ConcreteClass <: MyAbstract

end

第二行失败,错误为:
ERROR:UndefVarError:ConcreteClass未定义
。Julia控制台中的事情是,当我键入第二行时,自动完成确实建议
ConcreteClass
,因此可以识别该类型,但不确定为什么会出现
未定义
错误。

我想我已经找到了答案。我遗漏了一些似乎必要的
include
语句

MyModule.jl

module MyModule
export ConcreteClass
end
abstract MyAbstract
type ConcreteClass <: MyAbstract

end
module MyModule
export ConcreteClass
include("concrete.jl")
end
include("generics.jl")
type ConcreteClass <: MyAbstract

end
混凝土。jl

module MyModule
export ConcreteClass
end
abstract MyAbstract
type ConcreteClass <: MyAbstract

end
module MyModule
export ConcreteClass
include("concrete.jl")
end
include("generics.jl")
type ConcreteClass <: MyAbstract

end

就我个人而言,我将所有包含内容都放在MyModule.jl中。您只需要确保在concrete.jl之前包含generics.jl。“这只是一件时髦的事。”克瑞萨克斯,谢谢你。今天刚开始玩这门语言,在实践中学习:)很高兴知道。@ChrisRackauckas我有一点意见。通过这种方式,我向库用户隐藏了
MyAbstract
类,他们不能错误地尝试实例化它。这值得考虑吗?没有理由隐瞒。这是一种抽象类型。Julia用户将知道不要这样做。如果你想安全起见,可以在名字的开头加上
Abstract
:这是一个常见的习惯用法。但这最好通过文档而不是隐藏来解决。@chrisrackaukas我明白了。因此,它遵循python哲学。我仍然认为,如果可以对用户隐藏未定义的行为,那么它就有它的优势。