Scala下划线最小函数

Scala下划线最小函数,scala,anonymous-function,Scala,Anonymous Function,让我们为这个问题创造一个价值: val a = 1 :: Nil 现在,我可以演示匿名函数可以用以下简写形式编写: a.map(_*2) 是否可以编写此函数的速记 a.map((x) => x) 我的解决方案不起作用: a.map(_) 对于这个用例,您应该使用identity函数 a.map(identity) 标识在scala.Predef中定义为: 您的第一份速记表也可以无点书写 a map (2*) 多亏乘法是可交换的 对于x=>x,您需要identity函数。这是在P

让我们为这个问题创造一个价值:

val a = 1 :: Nil
现在,我可以演示匿名函数可以用以下简写形式编写:

a.map(_*2)
是否可以编写此函数的速记

a.map((x) => x)
我的解决方案不起作用:

a.map(_)
对于这个用例,您应该使用identity函数

a.map(identity)
标识在scala.Predef中定义为:


您的第一份速记表也可以无点书写

a map (2*)
多亏乘法是可交换的


对于x=>x,您需要identity函数。这是在Predef中定义的,是通用的,因此您可以确保它是类型安全的。

对于记录,a.map_uu不起作用,因为它代表x=>a.mapx,而不是a.mapx=>x。这是因为单个u代替参数代表部分应用的函数。在2*3;的情况下,它代表一个匿名函数。这两种用法非常接近,很容易被它们搞混。

没有多大意义,是吗?这只是个例子。这是一个很好的例子,在Scala中过度使用“uu”sugar使人们很难学会这种语言。我想你的意思是交换的。很遗憾,x=>x是四个字符,而identity是八个字符。这就是为什么我从不使用身份。@debilski这东西不容易你知道!当一个18个月大的孩子在为使用键盘而斗争时,情况就不一样了@Rex标识可能是8个字母,但它仍然是一个单一标识符,因此对于人类和编译器来说更容易解析alike@RexAST对此不敢苟同。。。我仍然看到我的眼睛被那个箭头吸引着:实际上这两个用法是一样的,占位符语法。规范没有使用“部分应用”这一短语;更改日志仅将其用于m_u语法;Scala中的编程首先将其用于m_u,然后用于m_u。但是f_u在语法上类似于if_u。部分应用程序得到了推断参数类型的帮助。嗯,那么我想知道为什么我们不能有一个类似val pFunc=a.map?@SpiXel的东西,你可以,但是你需要指定pFunc的类型。并不是说map需要一个函数,所以x=>a.mapx中的x将是从Int到某种类型的函数。无法推断这将是什么类型,因此,您需要指定pFunc的类型,此时Scala将乐意接受该行。
a map (2*)