Let's create a value for the sake of this question:
val a = 1 :: Nil
now, I can demonstrate that the anonymous functions can be written in shorthand form like this:
a.map(_*2)
is it possible to write a shorthand of this function?:
a.map((x) => x)
my solution doesn't work:
a.map(_)
Your first shorthand form can also be written point-free
a map (2*)
Thanks to multiplication being commutative.
As for (x) => x
, you want the identity
function. This is defined in Predef and is generic, so you can be sure that it's type-safe.
For the record, a.map(_)
does not work because it stands for x => a.map(x)
, and not a.map(x => x)
. This happens because a single _
in place of a parameter stands for a partially applied function. In the case of 2*_
, that stands for an anonymous function. These two uses are so close that is very common to get confused by them.
You should use identity
function for this use case.
a.map(identity)
identity
is defined in scala.Predef as:
implicit def identity[A](x: A): A = x
来源:https://stackoverflow.com/questions/4422016/scala-underscore-minimal-function