埃菲尔铁塔:更改继承特征的签名

时间:2019-01-12 18:59:02

标签: eiffel

如何更改Eiffel中功能的签名(如果有)的正确方法?如果没有我所理解的选项,那么如何在父类中定义将有一个功能可以选择但仍然不知道参数的数量和类型(类型可以通过多态解析。 )

是唯一具有多态性的游戏,且具有进入类A的参数以选择ANY类型的选择吗?

类SELECTABLE

class SELECTABLE

    select
        deferred 
        end

end -- class

DB_SERVICE类

class DB_SERVICE

inherit
    SELECTABLE
        (...)

feature -- Status setting


    select (a_db_connection: DB_CONNECTION)
        local
            l_qry: STRING
        do
            item := first_item_from_qry (l_qry)
        end

end -- class

1 个答案:

答案 0 :(得分:1)

在类SELECTABLE中具有以下内容确实是一种解决方案:

select (a: ANY)
    deferred
    end

另一种解决方案是使用TUPLE

select (a: TUPLE)
    deferred
    end

这使您可以在子孙类中使用多个参数:

select (a: TUPLE [db_connection: DB_CONNECTION])
    do
        a.db_connection.do_something
    end

可以称为:

a_db_server.select (a_db_connection)

或:

select (a: TUPLE [db_connection: DB_CONNECTION; db_parameters: DB_PARAMETERS])
    do
        a.db_connection.do_something (a.db_parameters)
    end

可以称为:

a_db_server.select (a_db_connection, a_dp_parameters)

请注意,在这种情况下,[...]参数中对显式元组符号select的需要是可选的。

当然,select是Eiffel中的关键字。您必须为功能使用其他名称。