在我自己的代碼和衆多郵件列表發帖中,我注意到由於Nothing被推斷爲另外兩種類型的最小上限而導致混淆。在什麼情況下推斷什麼都不可取?
答案可能是顯而易見的,你*,但我很懶,所以我要問你*:
在什麼情況下以這種方式推斷沒有最希望的結果?
在這種情況下,編譯器會拋出一個錯誤還是一個警告,除非被某種註釋覆蓋了是否合理?
*複數
在我自己的代碼和衆多郵件列表發帖中,我注意到由於Nothing被推斷爲另外兩種類型的最小上限而導致混淆。在什麼情況下推斷什麼都不可取?
答案可能是顯而易見的,你*,但我很懶,所以我要問你*:
在什麼情況下以這種方式推斷沒有最希望的結果?
在這種情況下,編譯器會拋出一個錯誤還是一個警告,除非被某種註釋覆蓋了是否合理?
*複數
這是不可能推斷Nothing
作爲兩種類型的最小上限,除非這兩種類型都是Nothing
。當你推斷兩種類型的最小上限時,這兩種類型沒有什麼共同之處,你會得到Any
(在大多數情況下,你會得到AnyRef
,因爲只有當類型的值類型時纔會得到Any
Int
或Long
)
沒有什麼是一切的亞型,因此它在一定意義上的任何櫃檯的一部分,這是超強型應有盡有。沒有東西不能被實例化,你永遠不會擁有一個Nothing對象。有兩種情況(我知道的),其中沒有什麼實際的用處:
object Nil extends List[Nothing]
,你可以用它來啓動你喜歡的任何列表。你的第二個問題:是的,這將是有益的。我猜想已經有一個編譯器開關用於打開這些警告,但我不確定。
謝謝,但我很清楚沒有什麼是好的,孤立地;我試圖弄清楚什麼時候它是有用的,它是由LUB算法推斷出來的。 – 2010-07-21 22:18:44
對於我不清楚的問題的正確答案,現在已經足夠了。 :) – 2010-11-12 02:03:39