Scala 为什么使用下划线只能打印一个点?

Scala 为什么使用下划线只能打印一个点?,scala,Scala,在Scala 2.9.2中 List(List(1,5,4),List(7,9,11)).flatten.map {i => println(i); identity(i) }.find { _ % 2 == 0 } 印刷品: 1 5 4 7 9 11 Option[Int] = Some(4) 但是 印刷品 . Option[Int] = Some(4) 我必须承认,我对这种行为有点惊讶。下划线似乎不仅仅是等效的内嵌函数的简写,而且对代码有其他影响。这是怎么回事 { println

在Scala 2.9.2中

List(List(1,5,4),List(7,9,11)).flatten.map {i => println(i); identity(i) }.find { _ % 2 == 0 }
印刷品:

1
5
4
7
9
11
Option[Int] = Some(4)
但是

印刷品

.
Option[Int] = Some(4)
我必须承认,我对这种行为有点惊讶。下划线似乎不仅仅是等效的内嵌函数的简写,而且对代码有其他影响。这是怎么回事

{ println("."); identity(_) }
不是打印点并返回标识的函数。它是一个代码块,在计算表达式时执行一次,打印一个点,然后返回函数
identity(41;
,该函数反过来映射到展开列表上


不是打印点并返回标识的函数。它是一个代码块,在计算表达式时执行一次,打印一个点,然后返回函数
identity(41;
,该函数反过来映射到展开列表上。

此解释不完全正确
{println(“.”);identity()}
包含一个函数,事实上它被分解为
{println(“.”);x=>identity(x)}
。这意味着将为列表中的所有值调用identity函数。@sschaef我想也许larsmans说过(第一次:)。奇怪的是,块不是神秘的或抽象的,而是产生了许多问题和废话来回答它们。这不仅仅是下划线的错。@som snytt ok,在再次阅读他的句子后,我觉得更有意义。编辑:他已经编辑了他的答案,这就是为什么现在对我来说更有意义;)这个解释并不完全正确
{println(“.”);identity()}
包含一个函数,事实上它被分解为
{println(“.”);x=>identity(x)}
。这意味着将为列表中的所有值调用identity函数。@sschaef我想也许larsmans说过(第一次:)。奇怪的是,块不是神秘的或抽象的,而是产生了许多问题和废话来回答它们。这不仅仅是下划线的错。@som snytt ok,在再次阅读他的句子后,我觉得更有意义。编辑:他已经编辑了他的答案,这就是为什么现在对我来说更有意义;)有些相似有些相似
{ println("."); identity(_) }