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”)