这个问题涉及使用类型和类型向量。我得到MethodError: convert
当我有两个文件时,Foo.jl
和Baz.jl
,每个包含一个模块,每个模块包含一种类型。
Foo.jl
的内容:module FooModule type Foo bar::Int end end
Baz.jl
的内容:module BazModule include("Foo.jl") type Baz qux::Vector{FooModule.Foo} end end
类型Foo
包含 Int
,然后输入 Baz
包含 Vector
的Foo
.
为了得到错误,我打开存储这些文件的 Julia 0.4.7-pre+3 REPL 并输入
include("Foo.jl")
include("Baz.jl")
foo1 = FooModule.Foo(1)
baz1 = BazModule.Baz([foo1])
其中第四个命令出现此错误:
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
由于 FooModule
之间的差异,似乎存在错误。与 include
相关BazModule
中的声明,以及 FooModule
在Foo.jl
本身。
我的代码中存在什么错误,以及我应该如何更改样式以消除错误?
最佳答案
我对您的代码进行了此更改,它对我有用
module BazModule
using FooModule
type Baz{T<:FooModule.Foo}
qux::Vector{T}
end
end
我认为您所做的问题是您重新定义了第一个模块,即第二个文档第二行中的 Foo 模块
include("Foo.jl")
如果您查看收到的错误,您会注意到
"call to the constructor BazModule.FooModule.Foo"
这应该会让您对错误有所了解
tl;dr 你应该写“using X”而不是 include(".jl that contains X")
关于types - 方法错误: `convert` when using types defined in modules in separate files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38742930/