我有这样的复合类型:
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)
我无法想象我必须做些什么来实例化我的自定义类型
答案 0 :(得分:3)
我无法重现此错误 - 您在我的计算机上正常运行的代码。关于Julia的一点是它不允许您重新定义自定义类型。从错误消息中可以看出,编译器仍在处理Vector{Int64}
类型的早期定义,该类型不使用您在自定义类型定义和构造函数中具有的type CPUEmulator
类型规范。问题
因此,如果您已经为julia myscript.jl
输入了一个定义,并且您正在使用给定的REPL会话,则需要关闭该REPL并重新打开它。或者,您可以从一开始就运行Julia程序,例如{{1}}。