Eiffel: несовместимый фактический аргумент в вызове функции - PullRequest
0 голосов
/ 31 января 2019

Я не понимаю, почему это так.

  • Если я скажу attached {G}, это будет работать
  • Если я ничего не скажу, что будет для меня ожидаемым поведением call_entity:отделяемый RELATED_DB_ENTITY должен соответствовать (после присоединения) к G, который является -> DB_ENTITY
  • Если я говорю DB_ENTITY, он не
  • Если я говорю RELATED_DB_ENTITY, либо он проходит

Почему я должен указать {G} ???

SIT_HANDLER

class
    SIT_HANDLER[G -> DB_ENTITY create default_create, make_from_db_service, make_from_json end]

feature --

    some_feature
        do
            if attached {G} l_rest_request.calling_entity as l_calling_entity then
                db_service.set_item_prototype (l_calling_entity) -- Complains here!!!!!!!!!!!!
                db_service.load_with_relationships (l_rest_request)
            ...
        end
end -- class

REST_REQUEST

class
    REST_REQUEST

feature -- Access
    calling_entity: detachable RELATED_DB_ENTITY -- RELATED_DB_ENTITY inherits DB_ENTITY
...
end -- class

DB_SERVICE

class
    DB_SERVICE [G -> DB_ENTITY create default_create, make_from_db_service, make_from_json end]

feature -- Status setting

    item_prototype: G

    set_item_prototype (v: like item_prototype)
        do
            item_prototype := v
        ensure
            item_prototype = v
        end

...
end -- class

enter image description here

1 Ответ

0 голосов
/ 31 января 2019

Тип RELATED_DB_ENTITY не соответствует типу G.

Вот пример, почему.Предположим, существует класс FOO, который наследуется от DB_ENTITY и имеет все необходимые процедуры создания.FOO и RELATED_DB_ENTITY не соответствуют друг другу.Для типа SIT_HANDLER [FOO] аргумент функции db_service.set_item_prototype имеет тип FOO, тогда как тип выражения l_rest_request.calling_entity равен RELATED_DB_ENTITY.Не допускается присваивать выражение типа RELATED_DB_ENTITY сущности типа FOO.

...