Причина в том, что Option приобрел метод flatten
в 2.10, который работает только на вложенных Option
s.
В 2.9 вызов flatten был добавлен неявным преобразованием в Iterable
, и в результате получился Iterable
(или его подтип, в зависимости от вложенного значения внутри Option
).
Вот подпись flatten
в 2.10:
def flatten[B](implicit ev: <:<[A, Option[B]): Option[B]
Он гласит: если вы можете найти доказательство того, что элементом внутри этой опции является Option
, скажем Option[B]
,Я могу сгладить это и вернуть Option[B]
.
Подразумеваются последствия, только если существует метод no с таким именем, поэтому это объясняет, почему он не возвращается к методу 2.9..