Scala минимальная функция подчеркивания
Позвольте создать значение для этого вопроса:
val a = 1 :: Nil
теперь, я могу показать, что анонимные функции могут быть записаны в сокращенной форме следующим образом:
a.map(_*2)
Можно ли написать стенографию этой функции?:
a.map((x) => x)
мое решение не работает:
a.map(_)
Ответы
Ответ 1
Ваша первая сокращенная форма также может быть написана без точек
a map (2*)
Благодаря умножению, являющемуся коммутативным.
Что касается (x) => x
, вам нужна функция identity
. Это определено в Predef и является общим, поэтому вы можете быть уверены, что оно безопасно.
Ответ 2
Для записи a.map(_)
не работает, потому что это означает x => a.map(x)
, а не a.map(x => x)
. Это происходит потому, что одиночный _
вместо параметра обозначает частично применимую функцию. В случае 2*_
это означает анонимную функцию. Эти два использования настолько близки, что их очень часто путают.
Ответ 3
Вы должны использовать функцию identity
для этого прецедента.
a.map(identity)
identity
определяется в scala.Predef как:
implicit def identity[A](x: A): A = x