与 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
在 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