在Scala 2.9.2中
List(List(1,5,4),List(7,9,11)).flatten.map {i => println(i); identity(i) }.find { _ % 2 == 0 }
Run Code Online (Sandbox Code Playgroud)
打印:
1
5
4
7
9
11
Option[Int] = Some(4)
Run Code Online (Sandbox Code Playgroud)
但
List(List(1,5,4),List(7,9,11)).flatten.map { println("."); identity(_) }.find { _ % 2 == 0 }
Run Code Online (Sandbox Code Playgroud)
打印
.
Option[Int] = Some(4)
Run Code Online (Sandbox Code Playgroud)
我必须承认,我对这种行为感到有些惊讶.Underscore似乎不仅仅是等效内联函数的简写,而是对代码有其他影响.这里发生了什么?
{ println("."); identity(_) }
Run Code Online (Sandbox Code Playgroud)
不是打印点并返回标识的函数.它是一个代码块,在计算表达式时执行一次,打印一个点,然后返回该函数identity(_),该函数又映射到展平列表上.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |