我有一个名为sandwich的包,它有:
一个文件flavours.jl,它定义了一个结构HamCheeseSandwich。
文件factory.jl是一个模块,它首先运行include("flavours.jl"),并有一个创建HamCheeseSandwich的方法make_sandwich,而不是生成返回sandwich.factory.HamCheeseSandwich的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当我检查类型时
Julia> sandwich.factory.HamCheeseSandwich == HamCheeseSandwich
false这意味着问题在于我使用include创建了两个版本的HamCheeseSandwich。
再生产
在这个回购中可以看到一个有用的例子:https://github.com/this-josh/Julia-structs-question
这种行为可以用
using sandwich
s = factory.make_sandwich(true,false)
print_sandwich(s)我的问题是,我应该如何在包中使用HamCheeseSandwich,以防止复制printer.jl,并确保我仍然可以像在printer.jl中那样输入提示
发布于 2022-02-15 09:53:05
您要多次定义HamSandwich类型,并且应该执行一次,然后引用定义。
因此,您的代码应该是:
module Sandwich
module Flavours
struct HamSandwich end
end
module Factory
import ..Flavours
makeSandwich() = Flavours.HamSandwich()
end
end测试:
julia> using Main.Sandwich
julia> Sandwich.Factory.makeSandwich()
Main.Sandwich.Flavours.HamSandwich()https://stackoverflow.com/questions/71123877
复制相似问题