为什么以下编译?
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
?
答案 0 :(得分:7)
当您添加Char
和另一个Char
时,结果为Int
。
scala> 'a' + 'c'
res2: Int = 196
这是错误消息的“找到”部分。
答案 1 :(得分:3)
这可能会有所帮助:
What is the concept of "weak conformance" in Scala?
http://lmazy.verrech.net/wp-content/uploads/2011/02/scala_type_hierarchy.png
此致 raichoo
答案 2 :(得分:2)
我猜你必须在这里帮助编译器如果你将ch1注释为Int它按预期工作吗? 问题是我猜你的意图被编译器误读了:) 应该怎么知道你声明一个Char来获取它的int值来添加另一个Int out if out?你试图在赋值后改变变量的类型,怎么可能呢?所以从var ch1开始:Int ='a'并且它可以工作。