Julia错误-定义时未找到构造函数

Julia错误-定义时未找到构造函数,julia,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(

将其复制到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)

mutable struct circularray{T}我认为错误很明显:您需要定义
circularray(length::Int)
。然而,您实现的是。要调用参数化构造函数,需要通过构造函数调用传递参数
T
,例如

a = CircularArray{Float64}(10);
您还可以为您选择的默认类型实现非参数构造函数。比如,

CircularArray(length::Int) = CircularArray{Float64}(length)
在此之后,调用此构造函数,
circularray(10)
,不会给出
方法错误:没有方法匹配CircularArray(::Int64)


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

我认为错误很明显:您需要定义
循环数组(length::Int)
。然而,您实现的是。要调用参数化构造函数,需要通过构造函数调用传递参数
T
,例如

a = CircularArray{Float64}(10);
您还可以为您选择的默认类型实现非参数构造函数。比如,

CircularArray(length::Int) = CircularArray{Float64}(length)
在此之后,调用此构造函数,
circularray(10)
,不会给出
方法错误:没有方法匹配CircularArray(::Int64)


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

我明白了,如果它说最接近的匹配是参数构造函数,那不是很有帮助吗?@BAR我同意这会很有帮助。然而,这里的问题是
circularray
circularray{Float64}
circularray{Int64}
,等等都是不同的构造函数,所以
circularray(::Int)
circularray{Float64}(::Int)
不是同一个函数的方法。IIRC,找到同一函数的方法的最接近匹配项。这就是为什么您没有看到更有用的错误消息。我明白了,如果它说最接近的匹配项是参数构造函数,这不是很有帮助吗?@BAR我同意这会很有帮助。然而,这里的问题是
circularray
circularray{Float64}
circularray{Int64}
,等等都是不同的构造函数,所以
circularray(::Int)
circularray{Float64}(::Int)
不是同一个函数的方法。IIRC,找到同一函数的方法的最接近匹配项。这就是为什么您没有看到更有用的错误消息。