为什么它评估为字符串?

时间:2017-03-23 08:51:03

标签: scala

我有以下表达式:

1 + "c"

结果我得到了

1c

我想,因为编译器将表达式转换为:

1.toString + "c"

对我而言,它根本不是逻辑,我期待一个例外,因为表达式的第一个参数是Int,它决定了结果类型。

如果它会反转

"c" + 1

然后我同意,该值应为String。

为什么编译器不会在第一个表达式上抛出异常?

2 个答案:

答案 0 :(得分:7)

因为scala.Int有成员方法+(x: String): String

1 + "c"只是1.+("c")的语法糖,它使用参数+调用1 "c"成员方法。

来自:http://docs.scala-lang.org/style/method-invocation.html#infix-notation

  

Scala有一个特殊的无标点语法来调用方法   拿一个论点。许多Scala程序员将这种表示法用于符号命名方法

答案 1 :(得分:1)

正如ymonad所写,转换是由scala.Int中的+运算符完成的。 请记住,这样的约定与您可以编写的java兼容:

String 1c = 1 + "c";