2016-12-16 42 views
0

我在讀「斯卡拉編程」一書,它提到==finalAny,意思是子類不能覆蓋它,所以當我看到這個例子List(1,2) == List(1,2),我去找到API doc, t找到方法==,Scala如何在List實際上定義該方法?爲什麼它不在API文檔中?Scala List API中的「==」方法在哪裏?

如果它不被List類覆蓋,那麼如何根據List項而不是對象引用進行比較?

+0

看起來像我已經問了一個愚蠢的問題。我認爲'val a = List(1,2)'和'val b = List(1,2)'具有相同的對象引用,因爲它們像字符串一樣是不可變的。 – GMsoF

回答

2

==是類Any中的最終方法,它叫.equals

問:Scala如何在List中實際定義該方法? A:在Scala執行環境中的每個類都直接繼承或從Any類間接地繼承或 。

斯卡拉的引用相等是eq

1

==是最終在類的任何,並Any類層次結構的根。 scala中的每個班級都會默認從Any延伸。所以當撥打斯卡拉==,它會打電話任何==方法首先。併爲Any== defnition:

如果(X EQ空),其情商空別的x.equals(即)

參見:Any Class