types - 方法错误: `convert` when using types defined in modules in separate files

标签 types julia

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

  1. Foo.jl的内容:

    module FooModule
    type Foo
      bar::Int
    end
    end
    
  2. Baz.jl的内容:

    module BazModule
    include("Foo.jl")
    type Baz
      qux::Vector{FooModule.Foo}
    end
    end
    

类型Foo包含 Int ,然后输入 Baz包含 VectorFoo .

为了得到错误,我打开存储这些文件的 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中的声明,以及 FooModuleFoo.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/

相关文章:

c# - 在 .NET 中获取泛型类型的基本名称的正确方法是通过 Substring?

julia - Julia 中的条件语句

julia - 利用 Julia 的集成能力

python - 检查参数是否是 Python 模块?

c# - 类型检查 : typeof, GetType,还是?

c++ - sf::Drawable 和 sf::Transformable 包含 Sprite 、文本和形状的数组

Java 泛型类型

julia - Julia 中的对称组 Action

julia - 在 Julia 中预分配已知大小的数据框

dataframe - 在 Julia 中使用数据框的元素