【问题标题】:Julia Error - Constructor not found when definedJulia 错误 - 定义时未找到构造函数
【发布时间】:2019-09-10 09:19:42
【问题描述】:

将此复制到一个 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)

【问题讨论】:

    标签: julia


    【解决方案1】:

    我认为错误很明显:您需要定义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 中出错。

    【讨论】:

    • 我明白了,如果它说最接近的匹配是参数构造函数不是很有帮助吗?
    • @BAR 我同意这会有所帮助。但是,这里的问题是CircularArrayCircularArray{Float64}CircularArray{Int64}等是不同的构造函数函数,所以CircularArray(::Int)CircularArray{Float64}(::Int)CircularArray{Int64}(::Int)不是方法相同的功能。 IIRC,为相同功能的方法找到最接近的匹配项。这就是为什么您看不到更有帮助的错误消息的原因。
    猜你喜欢
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多