Eiffel:类型转换运算符 ~ / 和附加语句之间有什么区别?
Eiffel: type casting operators whats the difference between ~ / and attached statements?
有什么区别
对象测试
if attached {DOG} an_animal as a_dog then
a_dog.eat (meat)
end
class TYPE
的运算符 /
if an_animal / a_dog then
an_animal.eat (food)
end
引用相等=
if a_dog = an_animal then
a_dog.eat (meat)
else
an_animal.eat (food)
end
对象相等~
if a_dog ~ an_animal then
a_dog.eat (meat)
else
an_animal.eat (food)
end
我在哪里可以找到相关文档?
构造之间的主要区别在于操作数类型和语义。
对象测试可以确定特定表达式的计算结果是否符合特定类型。可以通过关联对象测试本地检索符合对象的值。
运算符/
的classTYPE
returns传递参数的值,如果符合指定的类型类型对象。否则,它 returns Void
用于引用类型和扩展类型的默认值。这与对象测试非常相似,但有细微差别。本质上,表达式 {SOME_TYPE} / expression
等同于
if attached {SOME_TYPE} expression as value then
value
else
{detachable SOME_TYPE}.default
end
对于引用类型,对象测试attached {SOME_TYPE} expression as value
等同于
attached ({SOME_TYPE} / expression) as value
但是扩展类型没有等效项。
运算符/
的主要用途是在可能的情况下获取特定类型的值,否则Void
:
x := {SOME_TYPE} / expression
引用相等性=
比较(大部分时间)对象引用,与它们的类型无关。换句话说,引用对象的a = b
意味着a
和b
是别名。如果操作数之一是扩展对象,则 =
与对象相等性相同(见下文)。
如果表达式dog = animal
returnsTrue
,变量dog
和animal
引用同一个对象,但我们不知道它是什么类型是.
对象相等~
比较两个对象的内容。首先,它检查两者都是非空的,具有相同的类型,然后调用一个(用户定义的)谓词 is_equal
来获取运算符的结果。
如果表达式 dog ~ animal
returns True
,变量 dog
和 animal
可以是相同或不同的对象,具有相同的类型和相等(根据 is_equal
)。与之前的情况一样,我们不知道它们是什么类型。
1、3和4在语言标准中有记载,2是class的一个特性TYPE
(对应名称attempted
)。
有什么区别
对象测试
if attached {DOG} an_animal as a_dog then a_dog.eat (meat) end
class
的运算符TYPE
/
if an_animal / a_dog then an_animal.eat (food) end
引用相等
=
if a_dog = an_animal then a_dog.eat (meat) else an_animal.eat (food) end
对象相等
~
if a_dog ~ an_animal then a_dog.eat (meat) else an_animal.eat (food) end
我在哪里可以找到相关文档?
构造之间的主要区别在于操作数类型和语义。
对象测试可以确定特定表达式的计算结果是否符合特定类型。可以通过关联对象测试本地检索符合对象的值。
运算符
/
的classTYPE
returns传递参数的值,如果符合指定的类型类型对象。否则,它 returnsVoid
用于引用类型和扩展类型的默认值。这与对象测试非常相似,但有细微差别。本质上,表达式{SOME_TYPE} / expression
等同于if attached {SOME_TYPE} expression as value then value else {detachable SOME_TYPE}.default end
对于引用类型,对象测试
attached {SOME_TYPE} expression as value
等同于attached ({SOME_TYPE} / expression) as value
但是扩展类型没有等效项。
运算符
/
的主要用途是在可能的情况下获取特定类型的值,否则Void
:x := {SOME_TYPE} / expression
引用相等性
=
比较(大部分时间)对象引用,与它们的类型无关。换句话说,引用对象的a = b
意味着a
和b
是别名。如果操作数之一是扩展对象,则=
与对象相等性相同(见下文)。如果表达式
dog = animal
returnsTrue
,变量dog
和animal
引用同一个对象,但我们不知道它是什么类型是.对象相等
~
比较两个对象的内容。首先,它检查两者都是非空的,具有相同的类型,然后调用一个(用户定义的)谓词is_equal
来获取运算符的结果。如果表达式
dog ~ animal
returnsTrue
,变量dog
和animal
可以是相同或不同的对象,具有相同的类型和相等(根据is_equal
)。与之前的情况一样,我们不知道它们是什么类型。
1、3和4在语言标准中有记载,2是class的一个特性TYPE
(对应名称attempted
)。