Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: missingfaktorОтветов: 3

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

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?

compiler-errorsscala

Ответы

Ответ 1 · рейтинг 7 · n. 1.8e9-where's-my-share m.

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

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

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

Ответ 2 · рейтинг 3 · raichoo

Это может помочь:

Что такое концепция слабого соответствия в Scala?

http://lmazy.verrech.net/wp-content/uploads/2011/02/scala_type_hierarchy.png

С уважением, Райчу

Ответ 3 · рейтинг 2 · AndreasScheinert

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы