我尝试在lambda表达式中使用占位符来表达恒等函数,将(x => x)
写成(_)
。然而,它并没有给予我想要的结果:
scala> :t (1 to 5).map(_ + 1)
IndexedSeq[Int]
scala> :t (1 to 5).map(_)
(Int => Any) => IndexedSeq[Any]
字符串
是什么让第二个lambda不同于第一个lambda(就类型而言)?难道不是应该用x => x
替换的语法糖吗?
1条答案
按热度按时间piwo6bdm1#
Scala关于下划线的长度的规则可能有点复杂,但可以肯定的是,单独的下划线并不表示函数。
字符串
这不是一个单独的下划线。它是
_
,并应用了函数.+(1)
,因此它等效于型
另一方面,在一项研究中,
型
在这里,whole 调用实际上被吸收到下划线语法中,因此参数位于最前面。
型
正如注解中所指出的,下划线语法是针对非常特定的用例的,如果你的意思有一点点模糊(这里肯定是),你应该写一个显式的lambda。
型
或者只使用内置函数。
型