可拆卸通用于eiffel中的通用

时间:2017-10-27 17:25:16

标签: eiffel

我有一个后置条件的功能如下:

checkValue (k: K): detachable V
do
...
end
ensure
some_post_condition:
    checkKey (Result)

这是" checkKey"的原型:

checkKey (v: V): BOOLEAN

因为"结果"是"可拆卸的V"的类型,我尝试将其作为参数传递给" checkKey"只接受" V"但不是"可拆卸的V",因此它无法编译。

以下是编译错误:

Argument name: v
Argument position: 1
Formal argument type: Generic #1
Actual argument type: detachable Generic #1

如何将可拆卸通用转换为通用?

1 个答案:

答案 0 :(得分:1)

有几种选择:

  1. checkValue的类型从detachable V更改为V
  2. checkKey的参数类型从V更改为detachable V
  3. 将后置条件更改为

    • 如果始终附加Result

      result_attached: attached Result
      some_post_condition: checkKey (Result)
      
    • 如果Result可以拆卸(在这种情况下它被视为有效):

      some_post_condition: attached Result implies checkKey (Result)