Вводящая в заблуждение ошибка времени компиляции - PullRequest
1 голос
/ 28 июля 2011

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

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 ]

7 голосов
/ 28 июля 2011

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

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

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

3 голосов
/ 28 июля 2011
2 голосов
/ 28 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...