埃菲尔铁塔:如何在确保合同条款分离的情况下使用旧关键字

时间:2019-01-13 18:22:23

标签: eiffel

如何在功能的old子句中使用ensure关键字,当前语句在运行时似乎无效

relationships: CHAIN -- any chain

some_feature
    do
    (...)
    ensure
        relationship_added: attached relationships as l_rel implies
            attached old relationships as l_old_rel and then
            l_rel.count = l_old_rel.count
    end

在整个案例中,以下屏幕截图演示了案例

开始执行例程 enter image description here 例行执行结束 enter image description here

1 个答案:

答案 0 :(得分:1)

有2种情况需要考虑:原始引用为'n'时,而—不是:

void

断言的直觉如下:

  1. 如果attached relationships as r implies r.count = old (if attached relationships as o then o.count + 1 else 1 end) 在退出时是relationships,我们不在乎Void
  2. 如果在出口处附加了count,则其值比旧值多了一个。可以附加旧值或使用relationships
    • 如果附加了旧值,则新的项目数为旧数加Void;
    • 如果旧值为1,则新项目数为Void