根据this documentation,我正在尝试将通用参数限制为2个类,并且在实现中需要一个default_create
创建过程调用。
我从Syntax error
子句的编译器中获得了select
。为什么会这样?
我首先想到了调用default_create
会调用G
,这可能是合并/重命名/等。但似乎在该级别上我必须同时调用这两者之一或两者都重命名,这对我来说很有意义。但是为什么这种语法会失败?
上下文和我的代码如下:
deferred class
IDENTIFIABLE_CASH[G -> {IDENTIFIABLE[ANY],
DB_ENTITY select default_create end} create default_create end]
inherit
DB_SERVICE_CASH[G]
feature -- Access
cash_from_identifier (an_identifier: like {IDENTIFIABLE_DB_ENTITY[ANY]}.identifier): G
-- Returns firt entity found like given an_identifier (like operator is used)
local
l_qry: COMPOSED_SQL_QUERY
do
across
cash is l_item
loop
if l_item.identifier.is_equal(an_identifier) then
Result := l_item
end
end
if not attached Result then
create l_qry.make (item_prototype)
l_qry.add_constraint (create {FIELD_CONSTRAINT}.make (Void, identifier_db_column_name, {CONSTRAINT}.Like_operator, an_identifier))
load_entities (l_qry)
if items.count > 0 then
Result := items.first
else
create Result
check
item_not_found: False
end
end
cash.extend (Result)
end
end
答案 0 :(得分:1)
page声明select
子句不是标准的一部分,而应使用rename
。换句话说,为两个约束类中的至少一个重命名default_create
就足够了,并使用该功能的一个版本,例如default_create
:
G -> {IDENTIFIABLE[ANY], DB_ENTITY rename default_create as d end}
create default_create end
在上述情况下,可以使用Result
或create Result
创建create Result.default_create
。第二个版本也可以使用:
G -> {IDENTIFIABLE[ANY], DB_ENTITY rename default_create as d end}
create d end
现在只能使用Result
创建create Result.d
。最后,可以列出两个创建过程:
G -> {IDENTIFIABLE[ANY], DB_ENTITY rename default_create as d end}
create default_create, d end
最后一个变体允许使用create Result.default_create
或create Result.d
。