4

我不熟悉 Scala,在使用交互模式时遇到以下问题:

scala>"abc"+4
res0: java.lang.String = abc4
scala>4+"abc"
res1: String = 4abc

我很好奇的是结果的类型如何不同(java.lang.Stringvs String)。而在《七周七语》中,这两种类型都是java.lang.String

顺便说一句,scala 解释器的版本是 2.9.1。

4

2 回答 2

7

在 JVM 上,scalaString只是java.lang.String. StringRepl 有时将类型显示为有时 显示为的事实java.lang.String只是一个小故障(REPL 特定),不会以任何方式影响运行时行为。

对于它的价值,这是我在 scala 2.10-RC1 中得到的:

scala> "abc"+4
res0: String = abc4

scala> 4+"abc"
res1: String = 4abc
于 2012-11-13T15:11:37.763 回答
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.

在交互式解释器的输出中,type String = java.lanag.String应用在 Predef.scala 中定义。当然,反过来没有定义。

这看起来很脏

我不这么认为。

应该是一致的,以便它们始终是 String

我不这么认为。这是一致的。

java版本“1.7.0_09”

Scala 代码运行器版本 2.9.2

于 2012-11-14T07:39:04.837 回答