Джулия Ошибка - Конструктор не найден, когда определен - PullRequest
0 голосов
/ 20 апреля 2019

Скопировал это в ячейку ноутбука 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 Ответ

2 голосов
/ 20 апреля 2019

Я думаю, что ошибка ясна: вам нужно определить CircularArray(length::Int). Однако вы реализовали параметрический конструктор . Чтобы вызвать ваш параметрический конструктор, вам нужно передать параметр T с вызовом вашего конструктора, например,

a = CircularArray{Float64}(10);

Вы также можете реализовать непараметрический конструктор для выбранного по умолчанию типа. Например;

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

После этого ваш вызов этого конструктора, CircularArray(10);, не даст MethodError: no method matching CircularArray(::Int64).

Обратите внимание на ; в конце команд. Вам нужно определить другие методы (например, size) для вашего типа массива, чтобы display мог работать. В противном случае вы можете получить ошибку в REPL, если пропустите ; после оценок, которые возвращают CircularArray.

...