埃菲尔铁塔:功能调用中的实际参数不兼容

时间:2019-01-31 18:33:51

标签: polymorphism generic-programming eiffel

我不明白为什么它是如此。

  • 如果我说attached {G}可行
  • 如果我什么都不说这将是预期的行为,我calling_entity:可拆卸RELATED_DB_EN​​TITY应符合(附后)至G是 - > DB_EN​​TITY
  • 如果我说的不是DB_EN​​TITY
  • 如果我说RELATED_DB_EN​​TITY要么它通过

为什么我必须指定{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 :(得分:1)

类型RELATED_DB_ENTITY与类型G不符。

这是一个示例。假设有一个类FOO继承自DB_ENTITY,并具有所有必需的创建过程。 FOORELATED_DB_ENTITY不一致。对于类型SIT_HANDLER [FOO],特征db_service.set_item_prototype的自变量具有类型FOO,而表达式l_rest_request.calling_entity的类型为RELATED_DB_ENTITY。不允许将类型RELATED_DB_ENTITY的表达式分配给类型FOO的实体。