与 Eiffel 的关键字 `like` 的不变共享

Invariant sharing with Eiffel's keyword `like`

在 Eiffel 中,可以使用“anchored declaration”指定类型。

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

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

我没在任何地方看到这样写的,我认为不是这样的。有时,避免定义另一种类型会很方便,但我认为这会限制锚定声明在所有其他情况下的用处。

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

g: like f

锚类型"like f"只替换"g"的类型。将"f"的类型复制粘贴为"g"的类型非常相似。也就是说,在你的例子中,你写的和直接写的差不多:

g: INTEGER