Eiffel: классическая структура переключателя приведения типов с прикрепленным и осмотром

Что лучше всего делать, например,

local
    l_pet: ANIMAL
do
    l_pet := catch_it_from_the_sky
    inspect l_pet
    when attached {DOG} l_pet as l_dog
        l_dog.eat (meat)
    when attached {FISH} l_pet as l_fish
        l_fish.eat (plants)
    else
        io.put_string ("Strange animal how do I feed him???")
    end
do

компилятор жалуется на attached после того, как ...

Обновление: зачем такая необходимость?

потому что просто случилось, что я напортачил с повторяющимся копипастом, которого язык пытается избежать. В приведенном выше случае l_pet записывается один раз, причем N раз, если / иначе мне пришлось бы писать его столько раз, как если бы ...

На stackexchange отсутствует кнопка с изображением большого пальца, на которой написано «забавный пример». Надеюсь, вам понравится меня читать ;-)

Pipo 12.10.2018 17:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Оператор inspect позволяет проверить, имеет ли выражение определенное значение, и может применяться к выражениям целочисленных типов (например, INTEGER_64, CHARACTER_32 или NATURAL_8):

inspect age
when 6 .. 16 then ...
when 18 then ...
when 80, 90 then ...
...
end

Для различения типов объектов используются условные инструкции:

if attached {DOG} pet as dog then
   dog.eat (meat)
elseif attached {FISH} pet as fish then
   fish.eat (plants)
else
   io.put_string ("Strange animal how do I feed him???")
end

В многоотводной инструкции

inspect exp when ... then ... else ... end

Выражение exp должно быть символьным или целочисленным выражением.

В вашем примере я не вижу необходимости делать это Объект-Тест, но если вам нужно сделать что-то подобное, вам нужно использовать условную инструкцию.

if ... then ... elseif ... then ... else ... end

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