Это как toSet объявлен:
def toSet[B >: A]: Set[B]
Converts this immutable set to a set.
Короче она возвращает новый Set[B]
где B
может быть A
или любой супер тип A
.
Выполнение xs.toSet + 1.5
Вы не указали явно тип B
. Следовательно, теперь тип вывода попадает в действие, чтобы определить тип. Он видит, что xs
- это набор Int
и 1.5
- это двухместный номер. Type Inference теперь пытается найти тип, который может принимать Double в качестве аргумента.
Единственный следующий общий тип Int и Double - AnyVal
. Следовательно, B = AnyVal
, и вы получите новый результирующий набор как Set[AnyVal]
. Если вы явно указать тип, то он явно не удается, т.е.
scala> xs.toSet[Int] + 2.4
<console>:9: error: type mismatch;
found : Double(2.4)
required: Int
xs.toSet[Int] + 2.4
Для получения дополнительной справки: reference §6.26.4. Аналогичный question.