代码之家  ›  专栏  ›  技术社区  ›  Pipo

埃菲尔:类型转换运算符~/和附加语句有什么区别?

  •  0
  • Pipo  · 技术社区  · 7 年前

    这两者有什么区别

    • if attached {DOG} an_animal as a_dog then
         a_dog.eat (meat)
      end
      
    • 操作人员 / 全班同学 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
      

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   Alexander Kogtenkov    7 年前

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

    1. 接线员 / 全班同学 TYPE 如果传递的参数符合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
      

      是获取特定类型的值(如果可能),或者 否则:

      x := {SOME_TYPE} / expression
      
    2. 参考等式 = a = b 对于参照对象意味着 a 和 b =

      如果表达式 dog = animal 退货 True dog 和 animal 引用同一个对象,但我们不知道它是什么类型。

    3. 对象相等 ~ 比较两个对象的内容。首先,它检查两者是否都是非void,是否具有相同的类型,然后调用(用户定义的)谓词 is_equal

      如果表达式 dog ~ animal 退货 是的 ,变量 狗 可以是具有相同类型且相等的相同或不同对象(根据 ). 和前面的例子一样,我们不知道它们是什么类型。

    类型 (对应名称) attempted ).