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()
我有一个名为 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()