我已经看了scala-lang.org上的调查列表,并注意到一个奇怪的问题:" 你能说出"_"的所有用途吗? " 你能?如果是,请在此处进行.我们赞赏解释性的例子.
我是斯卡拉的新手.高阶函数跟随括号或括号块之间是否有任何差异?
例如:
List(1, 2, 3).map(i=> i + 1)
List(1, 2, 3).map {i => i + 1}
两者都得到相同的结果: List(2, 3, 4)
但是对于这个例子List(1, 2).map { println("Hi"); _ + 1 }结果如下,为什么'你好'只打印一次?
Hi
List[Int] = List(2, 3)
Run Code Online (Sandbox Code Playgroud) 在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似乎不仅仅是等效内联函数的简写,而是对代码有其他影响.这里发生了什么?
scala ×3