Система типов Eiffel опирается на структуру класса, а структура класса фиксируется во время компиляции. Может быть возможно добавлять типы динамически (например, должно быть возможно придумать решение с использованием отражения), но это не может быть выражено напрямую в самом языке.
Если животному разрешено знать свой сектор зоопарка, типы ZOO_SECTOR
могут быть закодированы непосредственно в классе животных:
class ANIMAL feature ...
sector: ZOO_SECTOR [like Current] do create Result end
end
Из-за использования like Current
нет необходимости добавлять новый код в потомки. Цикл из примера станет
across
animals as animal
loop
l_sector := animal.item.sector
end
дает ZOO_SECTOR [LION]
для элемента типа LION
и т. Д.