返回不同类型如果我评价斯卡拉REPL下面的表达式:斯卡拉非常类似的表述
scala> "1" + 1
res0: java.lang.String = 11
返回类型为:java.lang.String中。
如果我评价这种类似的表达:
scala> 1 + "1"
res1: String = 11
返回类型为:字符串。
为什么区别?
返回不同类型如果我评价斯卡拉REPL下面的表达式:斯卡拉非常类似的表述
scala> "1" + 1
res0: java.lang.String = 11
返回类型为:java.lang.String中。
如果我评价这种类似的表达:
scala> 1 + "1"
res1: String = 11
返回类型为:字符串。
为什么区别?
没有区别,但它也不是一个错误。在这种情况下:
"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
其是类型的来源“区别“。正如你可以看到这两个字符串实际上是相同的类型。
"1"+1
调用java.lang.String的operator +,1+"1"
调用由scala运行时定义的运算符+(现在无法找到它),因此它返回一个scala字符串。
相似问题:http://stackoverflow.com/questions/6559938/scala-string-vs-java-lang-string-type-inference – 2012-01-30 14:51:58
都在Scala 2.10中返回'String'。 – soc 2012-01-30 15:25:34