在scala中将Int添加到字符串中

在scala中将Int添加到字符串中,scala,types,casting,return-value,return-type,Scala,Types,Casting,Return Value,Return Type,我在理解以下几段scala代码背后的基本原理时遇到了一些困难: 我们都知道REPL中的1+1=2 scala> 1 + 1 res0: Int = 2 scala> "Abc" + "Def" res6: java.lang.String = AbcDef 如果我输入“Abc”+“Def”,我应该在REPL中得到“AbcDef” scala> 1 + 1 res0: Int = 2 scala> "Abc" + "Def" res6: java.lang.Strin

我在理解以下几段scala代码背后的基本原理时遇到了一些困难:

我们都知道REPL中的1+1=2

scala> 1 + 1
res0: Int = 2
scala> "Abc" + "Def"
res6: java.lang.String = AbcDef
如果我输入“Abc”+“Def”,我应该在REPL中得到“AbcDef”

scala> 1 + 1
res0: Int = 2
scala> "Abc" + "Def"
res6: java.lang.String = AbcDef
现在假设我调用字符串“Abc”上的+方法,并将“Def”作为参数传递:

scala> "Abc".+("Def")
res7: java.lang.String = AbcDef
同样的道理,为什么像1.+(1)这样的东西会返回双精度2.0

scala> 1.+(1)
res1: Double = 2.0
另外,为什么将参数“1”作为参数传递会导致“1.01”,如下所示:

scala> 1.+("1")
res9: String = 1.01
为什么返回的结果是字符串,而不是将“1”转换为调用者类型


谢谢

如果您在Scala 2.10.0上尝试此功能,您将得到答案的线索:

scala> 1.+(1)
<console>:1: warning: This lexical syntax is deprecated.  From scala 2.11,
             a dot will only be considered part of a number if it is immediately
             followed by a digit.
       1.+(1)
       ^
也就是说,将
Double
添加到包含在(冗余)括号内的表达式的中缀

对于后者,Scala遵循Java惯例,任何添加到
字符串
的内容都会导致
字符串
,反之亦然