首页 > 解决方案 > 埃菲尔:更改继承特征的签名

问题描述

如果有的话,如何正确更改 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

标签: eiffel

解决方案


在课堂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是埃菲尔的关键词。您将不得不为您的功能使用另一个名称。


推荐阅读