我有一个名为 的包sandwich
,它有:
flavours.jl
定义 struct 的文件HamCheeseSandwich
。
该文件factory.jl
是一个首先运行的模块include("flavours.jl")
,并且有一个方法make_sandwich
创建一个,但它返回的HamCheeseSandwich
不是生成一个HamCheeseSandwich
sandwich.factory.HamCheeseSandwich
最后一个文件是printer.jl
,这里制作的三明治factory.jl
失败了MethodError: no method matching print_sandwich(::sandwich.factory.HamCheeseSandwich)
# printer.jl
function print_sandwich(sandwich::HamCheeseSandwich)
println("Enjoy your sandwich")
println(sandwich)
end
Run Code Online (Sandbox Code Playgroud)
当我检查类型时
Julia> sandwich.factory.HamCheeseSandwich == HamCheeseSandwich
false
Run Code Online (Sandbox Code Playgroud)
这表明问题是我使用include
创建了两个版本的HamCheeseSandwich
.
可以在这个仓库中看到一个工作示例:https ://github.com/this-josh/Julia-structs-question
可以使用以下命令重现此行为
using sandwich
s = factory.make_sandwich(true,false)
print_sandwich(s)
Run Code Online (Sandbox Code Playgroud)
我的问题是我应该如何在包中使用 include 来防止重复HamCheeseSandwich
并确保我仍然可以输入提示,如printer.jl