误导编译时错误

时间:2011-07-28 11:51:08

标签: scala compiler-errors

为什么以下编译?

scala> val ch1 = 'a' + 'b'
ch1: Int = 195

但以下没有?

scala> var ch1 = 'a'
ch1: Char = a

scala> ch1 += 'b'
<console>:9: error: type mismatch;
 found   : Int
 required: Char
       ch1 += 'b'
           ^

scala> ch1 = ch1 + 'b'
<console>:8: error: type mismatch;
 found   : Int
 required: Char
       ch1 = ch1 + 'b'
                 ^

为什么错误信息会如此误导?当我传递的内容显然是required: Char时,为什么会说Char

3 个答案:

答案 0 :(得分:7)

当您添加Char和另一个Char时,结果为Int

scala> 'a' + 'c'      
res2: Int = 196

这是错误消息的“找到”部分。

答案 1 :(得分:3)

答案 2 :(得分:2)

我猜你必须在这里帮助编译器如果你将ch1注释为Int它按预期工作吗? 问题是我猜你的意图被编译器误读了:) 应该怎么知道你声明一个Char来获取它的int值来添加另一个Int out if out?你试图在赋值后改变变量的类型,怎么可能呢?所以从var ch1开始:Int ='a'并且它可以工作。