Подтвердить что ты не робот

Scala минимальная функция подчеркивания

Позвольте создать значение для этого вопроса:

val a = 1 :: Nil

теперь, я могу показать, что анонимные функции могут быть записаны в сокращенной форме следующим образом:

a.map(_*2)

Можно ли написать стенографию этой функции?:

a.map((x) => x)

мое решение не работает:

a.map(_)
4b9b3361

Ответ 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