Types MethodError:`convert`在单独的文件中使用模块中定义的类型时

Types MethodError:`convert`在单独的文件中使用模块中定义的类型时,types,julia,Types,Julia,这个问题涉及使用类型和类型的向量。我得到了MethodError:convert当我有两个文件时,Foo.jl和Baz.jl,它们分别包含一个模块,每个模块包含一种类型 Foo.jl的内容: module FooModule type Foo bar::Int end end module BazModule include("Foo.jl") type Baz qux::Vector{FooModule.Foo} end end Baz.jl的内容: module FooModu

这个问题涉及使用类型和类型的向量。我得到了
MethodError:convert
当我有两个文件时,
Foo.jl
Baz.jl
,它们分别包含一个模块,每个模块包含一种类型

  • Foo.jl
    的内容:

    module FooModule
    type Foo
      bar::Int
    end
    end
    
    module BazModule
    include("Foo.jl")
    type Baz
      qux::Vector{FooModule.Foo}
    end
    end
    
  • Baz.jl
    的内容:

    module FooModule
    type Foo
      bar::Int
    end
    end
    
    module BazModule
    include("Foo.jl")
    type Baz
      qux::Vector{FooModule.Foo}
    end
    end
    
  • 类型
    Foo
    包含
    Int
    ,类型
    Baz
    包含
    Foo
    向量

    为了得到错误,我打开了一个julia0.4.7-pre+3 REPL,其中存储了这些文件并键入

    include("Foo.jl")
    include("Baz.jl")
    foo1 = FooModule.Foo(1)
    baz1 = BazModule.Baz([foo1])
    
    其中,第4个命令给出此错误:

    ERROR: MethodError: `convert` has no method matching convert(::Type{BazModule.FooModule.Foo}, ::FooModule.Foo)
    This may have arisen from a call to the constructor BazModule.FooModule.Foo(...),
    since type constructors fall back to convert methods.
    Closest candidates are:
      BazModule.FooModule.Foo(::Any)
      call{T}(::Type{T}, ::Any)
      convert{T}(::Type{T}, ::T)
      ...
     in copy! at abstractarray.jl:310
     in call at /Users/james/Documents/code/julia/julia/Baz.jl:5
    
    由于与
    BazModule
    中的
    include
    语句关联的
    FooModule
    Foo.jl
    本身中的
    FooModule
    之间存在差异,因此似乎存在错误


    我的代码中的错误是什么?我应该如何更改样式以删除错误?

    我对您的代码进行了此更改,它对我有效

    module BazModule
        using FooModule
        type Baz{T<:FooModule.Foo}
            qux::Vector{T}
        end
    end
    
    如果你看一下你得到的错误,你会注意到的

    "call to the constructor BazModule.FooModule.Foo"
    
    这会让你对错误有所了解

    tl;您应该写“使用X”而不是include(“包含X的.jl”)