Почему я не могу составить карту List [Option], используя подчеркивание?

Почему я могу написать

val flat: List[Int] = List(Some(1), Some(2)).flatMap(i => i)

Но нет

val flat: List[Int] = List(Some(1), Some(2)).flatMap(_)

Ответы на вопрос(3)

Решение Вопроса

е функция.flatMap требует функции.

Кроме того, в этом случае естьflatten метод, который определен наList для которогоOption имеет в пределахPredef неявное преобразование так, что то, что вы написали, может быть сжато только в этот вызов,List(Some(1)).flatten

 Daniel Skogquist Åborg02 июн. 2016 г., 19:40
Есть ли лучший способ отобразить идентичность, отличную от x => x?
 wheaties02 июн. 2016 г., 19:41
@ DanielSkogquistÅborg обновлен. Это называетсяflatten и работает только на идентичныеM[_] или дляIterables сOption.
 Tzach Zohar02 июн. 2016 г., 19:42
Вы также можете использоватьidentity который определяется какdef identity[A](x: A): A = x вPredef.scala где удобство какflatten не под рукой.

List(Some(1), Some(2)).flatMap(_) коротка дляx => List(Some(1), Some(2)).flatMap(x)неList(Some(1), Some(2)).flatMap(x => x).

подчеркивание может относиться к отображению идентичности, напримерx => x, но flatMap требует отображения наTraversableOnce[U] такой как список предметов.

Например,List(1, 2).flatMap(Seq(_)) работает.List(1, 2).map(_ + 2) тоже работает. Первый - это просто отображение личности, а второй - r, eturnList(3, 4).

Однако, если у вас есть сложные преобразования вflatMap изmap (более одного оператора), вам придется правильно написать лямбда-функцию, иначе компилятор не сможет правильно определить тип. УвидетьScala неожиданно не может определить тип расширенной функции.

Ваш ответ на вопрос