Julia错误-定义时未找到构造函数
将其复制到jupyter笔记本电脑中,但无法使其运行,并且该消息也没有真正的帮助。一切看起来都很好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(
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,找到同一函数的方法的最接近匹配项。这就是为什么您没有看到更有用的错误消息。