我有以下表达式:
1 + "c"
Run Code Online (Sandbox Code Playgroud)
结果我得到了
1c
Run Code Online (Sandbox Code Playgroud)
我想,因为编译器将表达式转换为:
1.toString + "c"
Run Code Online (Sandbox Code Playgroud)
对我来说它根本不是逻辑,我期待一个异常,因为表达式的第一个参数是a Int,它决定了结果类型.
如果它会反过来像
"c" + 1
Run Code Online (Sandbox Code Playgroud)
然后我同意,该值应该是一个字符串.
为什么编译器不在第一个表达式上抛出异常?
这是因为scala.Int有成员方法+(x:String):String
1 + "c"只是一个语法糖 1.+("c"),它是用参数调用+成员方法.1"c"
来自:http://docs.scala-lang.org/style/method-invocation.html#infix-notation
Scala有一个特殊的无标点语法,用于调用带有一个参数的方法.许多Scala程序员将这种表示法用于符号命名方法
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |