Что лучше всего делать, например,
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 раз, если / иначе мне пришлось бы писать его столько раз, как если бы ...
Оператор 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
На stackexchange отсутствует кнопка с изображением большого пальца, на которой написано «забавный пример». Надеюсь, вам понравится меня читать ;-)