我不熟悉Scala,并在使用交互模式时遇到以下问题:
scala>"abc"+4
res0: java.lang.String = abc4
scala>4+"abc"
res1: String = 4abc
我很好奇的是结果的类型如何不同(java.lang.String
vs String
)。在Book Seven Languages in Seven Weeks 中,这两种类型都是java.lang.String
。
BTW,scala解释器的版本是2.9.1。
答案 0 :(得分:7)
在JVM上,scala的String
只是java.lang.String
的别名。 Repl有时将类型显示为String
,有时显示为java.lang.String
这一事实只是次要的(REPL特定的)故障,不会以任何方式影响运行时行为。
对于它的价值,这是我在scala 2.10-RC1中得到的:
scala> "abc"+4
res0: String = abc4
scala> 4+"abc"
res1: String = 4abc
答案 1 :(得分:0)
你想要什么???
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.
在Interactive Interpreter的输出处,应用了type String = java.lanag.String
,它在Predef.scala上定义。当然,反过来没有定义。
这看起来很脏
我不这么认为。
应该是一致的,以便它们始终是String
我不这么认为。这是一致的。
java版“1.7.0_09”
Scala代码运行版2.9.2