Julia 中的结构复制

Structs duplication in Julia

我有一个名为 sandwich 的包,它有:

一个文件 flavours.jl,它定义了一个结构 HamCheeseSandwich

文件 factory.jl 是一个模块,它首先运行 include("flavours.jl") 并且有一个创建 HamCheeseSandwich 的方法 make_sandwich,除了不生成 [=15] =]它returnssandwich.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

当我检查类型时

Julia> sandwich.factory.HamCheeseSandwich == HamCheeseSandwich
false

这表明问题是我对 include 的使用创建了 HamCheeseSandwich.

的两个版本

重现

可以在这个 repo 看到一个工作示例:https://github.com/this-josh/Julia-structs-question

此行为可以通过

重现
using sandwich
s = factory.make_sandwich(true,false)
print_sandwich(s)

我的问题是我应该如何在我的包中使用 include 来防止重复 HamCheeseSandwich 并确保我仍然可以像在 printer.jl

中那样输入提示

您多次定义类型 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()