2016-12-16 65 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