使用Eiffel的关键字`like`

时间:2016-11-06 21:01:01

标签: invariants eiffel

在Eiffel中,可以指定带有“anchored declaration”的类型。

我想知道类中的相关不变量是否也适用于锚定声明:

class C

feature

    f: INTEGER
        do
            ... Do something ...
        end

    g: like f
        do
            ... Do some other thing ...
        end

invariant
    0 < f
    -- 0 < g  <-- Does this pop into existence?
end

我没有看到这写在任何地方,我认为事实并非如此。有时,避免定义另一种类型会很方便,但我认为这会限制锚定声明在所有其他情况下的有用性。

1 个答案:

答案 0 :(得分:1)

不,不可能从锚定声明中自动创建不变量。在该行:

g: like f

锚类型“像f”只能替换“g”的类型。它非常类似于复制和粘贴“f”的类型作为“g”的类型。换句话说,在您的示例中,您所写的内容几乎与直接编写相同:

g: INTEGER