簡體   English   中英

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 
  • 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. 對象測試允許確定特定表達式是否評估為符合特定類型的值。 合格對象的值可以通過關聯的對象測試本地獲取。

  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 = b表示ab是別名。 如果操作數之一是擴展對象,則=與對象相等性相同(請參見下文)。

    如果表達式dog = animal返回True ,則變量doganimal引用相同的對象,但是我們不知道它是什么類型。

  4. 對象相等~比較兩個對象的內容。 首先,它檢查兩者是否都是非空的,具有相同的類型,然后調用(用戶定義的)謂詞is_equal以獲得運算符的結果。

    如果表達式dog ~ animal返回True ,變量doganimal可以(根據是具有相同類型的和是相等的相同或不同的對象is_equal )。 與前面的情況一樣,我們不知道它們是什么類型。

1、3和4以語言標准記錄,2是TYPE類的功能( attempted了相應的名稱)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM