首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eiffel:更改继承特征的签名

Eiffel:更改继承特征的签名
EN

Stack Overflow用户
提问于 2019-01-13 02:59:02
回答 1查看 44关注 0票数 0

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

唯一可用的多态性是不是在a类中有一个参数来选择ANY类型?

可选择的类

代码语言:javascript
复制
class SELECTABLE

    select
        deferred 
        end

end -- class

DB_SERVICE类

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-01-13 18:10:48

SELECTABLE类中包含以下内容确实是一种解决方案:

代码语言:javascript
复制
select (a: ANY)
    deferred
    end

另一种解决方案是使用TUPLE

代码语言:javascript
复制
select (a: TUPLE)
    deferred
    end

这允许您在后代类中有多个参数:

代码语言:javascript
复制
select (a: TUPLE [db_connection: DB_CONNECTION])
    do
        a.db_connection.do_something
    end

它可以被调用:

代码语言:javascript
复制
a_db_server.select (a_db_connection)

或者:

代码语言:javascript
复制
select (a: TUPLE [db_connection: DB_CONNECTION; db_parameters: DB_PARAMETERS])
    do
        a.db_connection.do_something (a.db_parameters)
    end

它可以被调用:

代码语言:javascript
复制
a_db_server.select (a_db_connection, a_dp_parameters)

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

当然,select是埃菲尔的一个关键词。您必须为您的功能使用另一个名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54162888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档