首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >朱莉娅的结构复制

朱莉娅的结构复制
EN

Stack Overflow用户
提问于 2022-02-15 09:19:52
回答 1查看 62关注 0票数 4

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

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

文件factory.jl是一个模块,它首先运行include("flavours.jl"),并有一个创建HamCheeseSandwich的方法make_sandwich,而不是生成返回sandwich.factory.HamCheeseSandwichHamCheeseSandwich

最后一个文件是printer.jl,这里用factory.jl制作的三明治在MethodError: no method matching print_sandwich(::sandwich.factory.HamCheeseSandwich)中失败

代码语言:javascript
复制
# printer.jl
function print_sandwich(sandwich::HamCheeseSandwich)
    println("Enjoy your sandwich")
    println(sandwich)
end

当我检查类型时

代码语言:javascript
复制
Julia> sandwich.factory.HamCheeseSandwich == HamCheeseSandwich
false

这意味着问题在于我使用include创建了两个版本的HamCheeseSandwich

再生产

在这个回购中可以看到一个有用的例子:https://github.com/this-josh/Julia-structs-question

这种行为可以用

代码语言:javascript
复制
using sandwich
s = factory.make_sandwich(true,false)
print_sandwich(s)

我的问题是,我应该如何在包中使用HamCheeseSandwich,以防止复制printer.jl,并确保我仍然可以像在printer.jl中那样输入提示

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 09:53:05

您要多次定义HamSandwich类型,并且应该执行一次,然后引用定义。

因此,您的代码应该是:

代码语言:javascript
复制
module Sandwich
  module Flavours
    struct HamSandwich end
  end
  module Factory
     import ..Flavours
     makeSandwich() = Flavours.HamSandwich()
  end 
end

测试:

代码语言:javascript
复制
julia> using Main.Sandwich

julia> Sandwich.Factory.makeSandwich()
Main.Sandwich.Flavours.HamSandwich()
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71123877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档