在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)
但是
List(List(1,5,4),List(7,9,11)).flatten.map { println("."); identity(_) }.find { _ % 2 == 0 }
打印
.
Option[Int] = Some(4)
我必须承认,我对这种行为感到有些惊讶。 Underscore似乎不仅仅是等效内联函数的简写,而是对代码有其他影响。这是怎么回事?
答案 0 :(得分:7)
{ println("."); identity(_) }
不是打印点并返回标识的函数。这是一个代码块,在计算表达式时执行一次,打印一个点,然后返回函数identity(_)
,然后映射到展平列表上。