Как уже ответил Вудс, значение 'b'
является символом, тогда как 'b
будет иметь тип Symbol
(каноническая строка, которая также является действительным идентификатором Scala).Тип 1006 * имеет особую особенность, которая поначалу может раздражать: при добавлении в список типа A
вы не ограничены добавлением экземпляров A
.Но если вы добавите в список что-то еще, кроме A
, в результате вы получите более общий список.Пример:
class A {}
class B extends A {}
class C extends A {}
val list1:List[B] = List(new B(), new B(), new B())
val list2:List[A] = new C() :: list1
Когда вы делаете что-то подобное, Scala находит более общий супертип (в приведенном выше примере это A
) и возвращает список этого типа.Это возможно только потому, что списки типа List
являются неизменными, и когда вы добавляете элемент в список, вы фактически создаете новый список и оставляете старый список без изменений.И новый список может быть более общего типа, чем исходный.
В вашем случае вы случайно наткнулись на эту функцию, потому что единственный общий супертип для Char
и Symbol
- Any
.