首页 文章

在scala中向字符串添加Int [duplicate]

提问于
浏览
2

这个问题在这里已有答案:

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

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

scala> 1 + 1
res0: Int = 2

如果我输入“Abc”“Def”,我应该在REPL中输入“AbcDef” .

scala> "Abc" + "Def"
res6: java.lang.String = AbcDef

现在假设我在String“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

为什么返回的结果是String而不是“1”的努力转换成调用者类型?

谢谢

1 回答

  • 10

    如果你在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 ,反之亦然 .

相关问题