scala类型推断及库方法设计原则和==与java有何差别

scala类型推断

方法msortSwapped(abcd)(_>_)

通常,一旦有需要推断多台方法类型参数的任务时,类型推断器就只参考第一个参数列表中所有参数类型,但不会参考之后其他参数。因为方法msortSwapped是柯里化的方法,带两个参数列表,所以第二个参数(也就是说,那个函数值)将不会用来做决定方法参数的参考。

因此这种类型推断方案也隐含了如下库方法设计原则:如果需要把参数设计为若干非函数值及一个函数值的某种多态方法,需要把函数参数放在柯里化参数列表的最后面。这样一来,方法的正确类型就可以通过非函数参数类推断出来,并且这个类型可以转而用来完成函数参数类型检查。从而使得方法的使用者可以避免提供更多类型信息并能编译出更简洁的函数字面量。

==与java有何差别

scala的==遵循的比较规则:

首先检查左侧是否为null,如果不是,调用左操作数据equals方法。所以,精确的比较取决于做操作的equals方法定义。由于自动的null检查,因此不需要手动再检查一次了。

java里==既可以比较原始类型也可以比较引用类型。对于原始类型,java的==比较值的相等性,与scala一致。二对于引用类型,java的==比较了引用类型的相等性,也就是说比较的是两个变量是否都指向JVM堆里的同一个对象。scala也提供了这种机制,名字是eq。不过,eq和它的反义词neq,仅仅应用于可以直映射到java的对象。

posted @ 2015-12-06 14:17  NevermorePis  阅读(496)  评论(0编辑  收藏  举报