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
解决方案
在课堂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
是埃菲尔的关键词。您将不得不为您的功能使用另一个名称。
推荐阅读
- python - 在 Django 模型中创建多维数组字段
- vue.js - 比 el-tabs 性能更好的多标签页
- node.js - 在 node-postgres 中安排到期时间
- macos - 在 Mac OS El Capitan 上安装和配置 Jenkins
- python - ValueError:基于位置的索引只能具有 [整数、整数切片、整数列表、布尔数组] 类型
- python - Python没有在游戏中注册击键
- r - R帮助将两个数据帧的子集加1并除以int值
- css - 当内容发生变化时,为 div 的扩展添加平滑过渡(React)
- javascript - 问题导航背景颜色不变
- r - BOX.TEST 的 Rmarkdown 输出以错误的方式打印