我有以下表达式:
1 + "c"
结果我得到了
1c
我想,因为编译器将表达式转换为:
1.toString + "c"
对我而言,它根本不是逻辑,我期待一个例外,因为表达式的第一个参数是Int
,它决定了结果类型。
如果它会反转
"c" + 1
然后我同意,该值应为String。
为什么编译器不会在第一个表达式上抛出异常?
答案 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";