我在理解以下几段scala代码背后的基本原理时遇到了一些问题:
我们都知道在REPL中1+1=2。
scala> 1 + 1
res0: Int = 2如果我输入"Abc“+ "Def",我应该在REPL中得到"AbcDef”。
scala> "Abc" + "Def"
res6: java.lang.String = AbcDef现在假设我对字符串"Abc“调用+方法,并将"Def”作为参数传递:
scala> "Abc".+("Def")
res7: java.lang.String = AbcDef按照同样的逻辑,为什么像1.+(1)这样的东西会返回double 2.0?
scala> 1.+(1)
res1: Double = 2.0另外,为什么将参数"1“作为参数传递会导致"1.01”,如下所示:
scala> 1.+("1")
res9: String = 1.01为什么返回的结果是一个字符串,而不是对我来说"1“的结果转换为调用者类型?
谢谢
发布于 2013-02-11 16:05:51
如果你在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)
^简单地说,1.在Scala中是一个有效的Double (就像在Java中一样),所以Scala真正做到了这一点:
1. + (1)也就是说,在包含在(冗余)括号内表达式中插入Double加法。
至于后者,Scala遵循Java约定,任何添加到String中的内容都会生成String,反之亦然。
https://stackoverflow.com/questions/14807919
复制相似问题