朱莉娅错误-定义时找不到构造函数

时间:2019-04-20 11:31:20

标签: julia

将其复制到jupyter笔记本计算机中,但无法使其运行,并且该消息并没有真正帮助。一切看起来都很好。

mutable struct CircularArray{T} <: AbstractArray{T,1}
    data::Array{T,1}
    first::Int
    CircularArray{T}(length::Int) where {T} = new{T}(Array{T, 1}(undef, length), 1)
end

a = CircularArray(10)
MethodError: no method matching CircularArray(::Int64)

1 个答案:

答案 0 :(得分:2)

我认为错误很明显:您需要定义CircularArray(length::Int)。但是,您实现的是a parametric constructor。要调用参数化构造函数,您需要在构造函数调用中传递参数T,例如

a = CircularArray{Float64}(10);

您还可以为您选择的默认类型实现非参数构造函数。例如;

CircularArray(length::Int) = CircularArray{Float64}(length)

此后,您对此构造函数CircularArray(10);的调用将不会给出MethodError: no method matching CircularArray(::Int64)

注意命令末尾的;。您需要为数组类型定义其他方法(例如size),以便display可以工作。否则,如果在返回;的求值后省略CircularArray,则REPL可能会出错。