Eiffel: способ проверить соответствие типа заданному CLASS_NAME - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь сделать что-то как

work (a_father: FATHER)
    do
        if a_father.conforms_to ({DEVELOPER}) then
           a_father.code
        else
           a_father.change_job ({DEVELOPER})
        end
    end

enter image description here enter image description here

компиляция работает, но вмоя реализация @runtime не проходит.Что я набрал?

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Лучше использовать встроенный механизм для проверки соответствия типа объекта:

if attached {DEVELOPER} a_father as dev then
     dev.code
else
     a_father.rest
end

И использовать тот же подход в предварительном условии:

attached {RELATED_DB_ENTITY} a_relationship_entity

Тест объекта делаетчто вы хотели бы: он проверяет, что тип объекта, присоединенного к аргументу a_relationship_entity, соответствует типу RELATED_DB_ENTITY.

1 голос
/ 28 июня 2019

Проблема в вашем примере заключается в том, что вы пытаетесь определить, соответствует ли тип FATHER (тип объекта a_father) типу TYPE [DEVELOPER] (тип объекта {DEVELOPER}).

Что вы должны сделать, это:

if a_father.generating_type.is_conforming_to ({DEVELOPER}) then

, следовательно, сравнивая TYPE [FATHER] с TYPE [DEVELOPER].

Обратите внимание, что я предполагаю, что это сработает, заменив is_conforming_to на conforms_to, но класс TYPE ввел эту подпрограмму is_conforming_to с более конкретным типом аргумента.

...