2012-01-30 66 views
5

返回不同类型如果我评价斯卡拉REPL下面的表达式:斯卡拉非常类似的表述

scala> "1" + 1 
res0: java.lang.String = 11 

返回类型为:java.lang.String中

如果我评价这种类似的表达:

scala> 1 + "1" 
res1: String = 11 

返回类型为:字符串

为什么区别?

+2

相似问题:http://stackoverflow.com/questions/6559938/scala-string-vs-java-lang-string-type-in​​ference – 2012-01-30 14:51:58

+3

都在Scala 2.10中返回'String'。 – soc 2012-01-30 15:25:34

回答

14

没有区别,但它也不是一个错误。在这种情况下:

"1" + 1 

您正在使用Java的内置功能将任何内容连接到字符串中。毕竟,许多人将数字转换到使用下面的“成语”的字符串:

String s = "" + 5; 

它工作在斯卡拉以及和结果与java.lang.String - 相同的Java。

在另一方面:

1 + "1" 

是一个有点复杂。这个被翻译成:

1.+("1") 

+()方法是从Int.+方法位于Int.scala采取:

final class Int extends AnyVal { 
    //.... 
    def +(x: String): String = sys.error("stub") 

String在此上下文中在Predef.scala定义:

type String  = java.lang.String 

其是类型的来源“区别“。正如你可以看到这两个字符串实际上是相同的类型。

2

"1"+1调用java.lang.String的operator +,1+"1"调用由scala运行时定义的运算符+(现在无法找到它),因此它返回一个scala字符串。