我不熟悉 Scala,在使用交互模式时遇到以下问题:
scala>"abc"+4
res0: java.lang.String = abc4
scala>4+"abc"
res1: String = 4abc
我很好奇的是结果的类型如何不同(java.lang.String
vs String
)。而在《七周七语》中,这两种类型都是java.lang.String
。
顺便说一句,scala 解释器的版本是 2.9.1。
在 JVM 上,scalaString
只是java.lang.String
. String
Repl 有时将类型显示为有时 显示为的事实java.lang.String
只是一个小故障(REPL 特定),不会以任何方式影响运行时行为。
对于它的价值,这是我在 scala 2.10-RC1 中得到的:
scala> "abc"+4
res0: String = abc4
scala> 4+"abc"
res1: String = 4abc
你想要什么 ???
scala> (4+"abc").getClass.getName
res3: java.lang.String = java.lang.String
scala> ("abc"+4).getClass.getName
res5: java.lang.String = java.lang.String
两者都是 java.lang.String。我认为交互式口译员只是说String
不是java.lang.String
。但是我们有 java.lang.String 实例。
("abc"+4): '+' is applied to java.lang.String, and returns java.lang.String. This is true both on Java and Scala.
(4+"abc") on Java: '+' is applied to java.lang.Integer, and returns java.lang.String.
(4+"abc") on Scala: '+' is applied to scala.Int, and returns String. '+(x: String)' is defined on scala.Int.
在交互式解释器的输出中,type String = java.lanag.String
应用在 Predef.scala 中定义。当然,反过来没有定义。
这看起来很脏
我不这么认为。
应该是一致的,以便它们始终是 String
我不这么认为。这是一致的。
java版本“1.7.0_09”
Scala 代码运行器版本 2.9.2