scala - 为什么 Scala 中有 RichInt 或 RichX?

标签 scala implicit

这是一个简单的问题。

为什么与 Int 相关的方法不在 Int 中?
相反,Scala 费心将相关方法放入 RichInt并依靠 隐式转换 以便让它们像 Int 的方法一样工作.

何苦?

最佳答案

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

这意味着在某些情况下必须做出妥协,以便使 Scala 无缝、高效地运行,并与宿主平台的生态系统、库和语言一起运行。这就是为什么它有 null ,为什么它有类(它可以只使用特征,并允许特征具有构造函数),为什么它有包(因为它们可以干净地映射到 Java 包或 .NET 命名空间),为什么它没有适当的尾部调用,没有具体化泛型等。这也是为什么它有花括号,不是为了更容易与Java集成,而是更容易与Java开发人员的大脑集成。
scala.Int是一个假类,它代表一个原生平台整数(Java 中的原始 int,.NET 中的 System.Int32 等)。假的,除了宿主环境提供的操作之外,它真的没有任何方法。

另一种方法是在 Int 中进行所有操作。类并让编译器知道哪些方法是 native 的,哪些不是。但这是一个特例,通常集中精力让“丰富我的库”更快更有意义,这样所有程序员都可以从这些优化中受益,而不是将时间、金钱和资源花在仅适用于十二个的优化上左右类。

关于scala - 为什么 Scala 中有 RichInt 或 RichX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29655076/

相关文章:

scala - 隐式的范围

c++ - 通过具有多个参数的构造函数隐式转换

模式匹配中的Scala隐式提取值?

scala - Scala的语义可遍历,可迭代,序列,流和 View ?

java - 在Java中的scala.collection.immutable.Vector中间添加元素

scala - Spark中ALS的实现

Scala - Spark sql 结构上的行模式匹配

scala - 以编程方式启动 Scala REPL?

scala - 为什么隐式值类有一个额外的方法调用?

scala - 仅对 “diverging implicit expansion”记录隐式日志