2014-02-11 2 views

ответ

8

Это как 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.

Смежные вопросы