Юля, MethodError: нет совпадения методов

Я хотел проверить, как абстрактный тип работает в «strcutres», поэтому я создал структуру ниже с помощью конструктора, однако в возвращаемом сообщении отображается «ОШИБКА: MethodError: нет метода, соответствующего Rect (:: Int64)».

Я не знаю, какая часть пошла не так, хотя параметр «5», который я использовал, соответствует определению конструктора, который представляет собой одно целое число. Спасибо.

abstract type Shape{T<:Integer,F<:AbstractFloat} end
export Shape

struct Rect{T,F} <: Shape{T,F}
    a::T
    b::T
    c::T
    v::F
    function Rect{T,F}(a::T) where {T<:Integer, F<:AbstractFloat}
        b = 10;
        c = 10;
        v = a*b*c;
        return new(a,b,c,v)
    end
end

function main()

    vol = Rect(5).v;

    println(vol)

end

main()

Он должен возвращать произведение a, b и c, причем только a является входной переменной.

Имея только аргумент типа T, как конструктор узнает, какой тип F? Попробуйте Rect{Int64,Float64}(5).v

Dan Getz 21.01.2023 02:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас нет соответствующего конструктора. Ты должен сделать:

julia> Rect{Int,Float64}(5)
Rect{Int64, Float64}(5, 10, 10, 500.0)

Другой вариант - добавить конструктор в вашу структуру:

function Rect{T}(a::T) where {T<:Integer}
    Rect{Int,Float64}(a)
end

Как только вы добавите конструктор, вы можете сделать:

julia> Rect{Int}(5)
Rect{Int64, Float64}(5, 10, 10, 500.0)

Или вы также можете определить:

Rect(a::Int) =  Rect{Int,Float64}(a)

и имеют

julia> Rect(5)
Rect{Int64, Float64}(5, 10, 10, 500.0)

Большое спасибо! После добавления конструктора в строке Rect{Int,Float64}(a) вызывается функция-конструктор Rect{T,F}(a::T)... Я ранее определил?

haochen 21.01.2023 11:11

Да, точно. Вы также можете определить для удобства что-то вроде `Rect(a::Int) = Rect{Int,Float64}(a)`

Przemyslaw Szufel 21.01.2023 16:09

Другие вопросы по теме