将其复制到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)
答案 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可能会出错。