MethodError:'convert'在实例化类型

时间:2016-09-13 22:02:00

标签: types julia

我有这样的复合类型:

type CPUEmulator
  memory::Vector{Int64}

  CPUEmulator(memory::Vector{Int64}) = new(memory)
end

当我尝试像这样实例化时,

myCPU = CPUEmulator([1,2])

我收到以下错误:

LoadError: MethodError: `convert` has no method matching convert(::Type{CPUEmulator}, ::Array{Int64,1})
This may have arisen from a call to the constructor CPUEmulator(...),
since type constructors fall back to convert methods.
Closest candidates are:
  CPUEmulator(::Any, !Matched::Any)
  call{T}(::Type{T}, ::Any)
  convert{T}(::Type{T}, !Matched::T)

在文档示例中, 你有一个类型:

type Foo
  bar
  end
end

你可以像这样实例化它:

foo = Foo(1,2)

我无法想象我必须做些什么来实例化我的自定义类型

1 个答案:

答案 0 :(得分:3)

我无法重现此错误 - 您在我的计算机上正常运行的代码。关于Julia的一点是它不允许您重新定义自定义类型。从错误消息中可以看出,编译器仍在处理Vector{Int64}类型的早期定义,该类型不使用您在自定义类型定义和构造函数中具有的type CPUEmulator类型规范。问题

因此,如果您已经为julia myscript.jl输入了一个定义,并且您正在使用给定的REPL会话,则需要关闭该REPL并重新打开它。或者,您可以从一开始就运行Julia程序,例如{{1}}。