Вводящая в заблуждение ошибка времени компиляции

Почему следующее компилируется?

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?


person missingfaktor    schedule 28.07.2011    source источник


Ответы (3)


Когда вы добавляете Char и еще один Char, результатом будет Int.

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

Это «найденная» часть сообщения об ошибке.

person n. 1.8e9-where's-my-share m.    schedule 28.07.2011


Я думаю, вы должны помочь компилятору, если вы аннотируете ch1 как Int, он работает, как ожидалось? Проблема в том, что я предполагаю, что компилятор неправильно понял ваше намерение :) Как он должен знать, что вы объявляете Char, чтобы получить его значение int, чтобы добавить еще один Int, если это так? Вы пытаетесь изменить тип переменной после присваивания, как это должно работать? Итак, начните с var ch1:Int='a', и это сработает.

person AndreasScheinert    schedule 28.07.2011