为什么Scala中有RichInt或RichX?

Wei*_*Lin 4 scala implicit

这是一个简单的问题。

为什么与Int有关的方法没有驻留在Int
相反,Scala费心将相关方法放入RichInt并依赖隐式转换,以使它们像的方法一样工作Int

何必?

Jör*_*tag 6

Scala在真空中不存在。它是专门为在生态系统中/在主要用于另一种语言而设计的平台上托管的:Java平台,.NET平台,ECMAScript平台,Cocoa等。

这意味着在某些情况下,必须做出折衷,以使Scala无缝,高效地运行,并与主机平台的生态系统,库和语言保持高性能。这就是为什么它具有null原因,为什么具有类(它可以仅使用特征,并允许特征具有构造函数),为什么具有程序包(因为它们可以干净地映射到Java程序包或.NET名称空间),为什么不这样。它没有适当的尾部调用,没有泛化的泛型等。这甚至是为什么花括号的原因,不是为了使其更易于与Java集成,而是为了使其易于与Java开发人员的大脑集成。

scala.Int是一个伪造的类,它表示一个本地平台整数(intJava,System.Int32.NET等中的原始整数)。是伪造的,除宿主环境提供的操作外,它实际上没有任何其他方法。

另一种选择是让类中具有所有操作,并使Int编译器知道哪些方法是本机的,哪些不是本机的。但是,这是一个特例,它更有意义,集中力量在做“充实,我的图书馆”快于一般的,让所有的程序员可以从这些优化,而不是在优化花费时间,金钱和资源,只适用到十二受益左右课。