首页 > 解决方案 > Eiffel:类型转换运算符 ~ / 和附加语句有什么区别?

问题描述

有什么区别

我在哪里可以找到相关文档?

标签: eiffel

解决方案


构造之间的主要区别在于操作数类型和语义。

  1. 对象测试允许确定特定表达式的计算结果是否符合特定类型的值。可以通过关联的对象测试本地检索符合对象的值。

  2. /类的运算符TYPE返回传递参数的值,如果它符合类型对象指定的类型。否则,它返回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
    
  3. 引用相等=比较(大多数时候)对象引用并且与它们的类型无关。换句话说,a = bfor reference objects 意味着ab是别名。如果其中一个操作数是扩展对象,=则与对象相等性相同(见下文)。

    如果表达式dog = animal返回True,变量doganimal引用同一个对象,但我们不知道它是什么类型。

  4. 对象相等~比较两个对象的内容。首先,它检查两者都是非空的,具有相同的类型,然后调用(用户定义的)谓词is_equal来获取运算符的结果。

    如果表达式dog ~ animal返回True,则变量doganimal可以是相同或不同的具有相同类型且相等的对象(根据is_equal)。与前一种情况一样,我们不知道它们是什么类型。

1、3 和 4 记录在语言标准中,2 是类的特征TYPE(具有相应的名称attempted)。


推荐阅读