![](/img/trans.png)
[英]Eiffel: What's the difference between an “eiffel” library and a gobo library?
[英]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
在哪里可以找到有關的文檔?
構造之間的主要區別在於操作數類型和語義。
對象測試允許確定特定表達式是否評估為符合特定類型的值。 合格對象的值可以通過關聯的對象測試本地獲取。
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
引用相等=
比較(大多數情況下)對象引用,並且與它們的類型無關。 換句話說,參考對象的a = b
表示a
和b
是別名。 如果操作數之一是擴展對象,則=
與對象相等性相同(請參見下文)。
如果表達式dog = animal
返回True
,則變量dog
和animal
引用相同的對象,但是我們不知道它是什么類型。
對象相等~
比較兩個對象的內容。 首先,它檢查兩者是否都是非空的,具有相同的類型,然后調用(用戶定義的)謂詞is_equal
以獲得運算符的結果。
如果表達式dog ~ animal
返回True
,變量dog
和animal
可以(根據是具有相同類型的和是相等的相同或不同的對象is_equal
)。 與前面的情況一樣,我們不知道它們是什么類型。
1、3和4以語言標准記錄,2是TYPE
類的功能( attempted
了相應的名稱)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.