Pri*_*osK 5 java expression scala
如果我在Scala REPL中评估以下表达式:
scala> "1" + 1
res0: java.lang.String = 11
Run Code Online (Sandbox Code Playgroud)
返回的类型是:java.lang.String.
如果我评估这个相似的表达式:
scala> 1 + "1"
res1: String = 11
Run Code Online (Sandbox Code Playgroud)
返回的类型是:String.
为什么不同?
Tom*_*icz 14
没有区别,但它也不是一个bug.在这种情况下:
"1" + 1
Run Code Online (Sandbox Code Playgroud)
您正在使用Java的内置功能将任何内容连接到String中.毕竟,许多人使用以下"成语"将数字转换为字符串:
String s = "" + 5;
Run Code Online (Sandbox Code Playgroud)
它也适用于Scala,结果与java.lang.StringJava相同.
另一方面:
1 + "1"
Run Code Online (Sandbox Code Playgroud)
有点复杂.这被翻译成:
1.+("1")
Run Code Online (Sandbox Code Playgroud)
该+()方法取自Int.+位于Int.scala以下方法的方法:
final class Int extends AnyVal {
//....
def +(x: String): String = sys.error("stub")
Run Code Online (Sandbox Code Playgroud)
的String在这方面的定义中Predef.scala:
type String = java.lang.String
Run Code Online (Sandbox Code Playgroud)
这是" 差异 " 类型的来源.正如您所看到的,两个字符串实际上是相同的类型.