В лесу уже ответили, значение 'b'
является характер, в то время как 'b
будет иметь тип Symbol
(канонической строки, которая также является допустимым идентификатором Scala).
Тип List
имеет очень особенную функцию, которая может вызвать раздражение вначале: при добавлении к списку типа 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
.