我正在学习scala.我正在读Scala的不耐烦.
1.)
逆天
有区别吗?
for (i <- 0 to 10)if (i % 2 == 0) println(i)
for (i <- 0 to 10 if i % 2 == 0) println(i)
Run Code Online (Sandbox Code Playgroud)
2.)
我总是看到以下符号,=>但他们从不解释它的作用.
有时我认为这是一个演员,但它是完全不同的东西,我希望你能搞清楚.
1.)是的,有一个区别,第一个if是在封闭内部的正常陈述,你传递给for-comprehension.第二个是真正的后卫.withFilter在打电话之前,它实际上会调用范围foreach.所以这两件事的翻译将如下所示:
0.to(10).foreach(i => if(i % 2 == 0) println(i) )
0.to(10).withFilter(x => x % 2 == 0).foreach(i => println(i))
Run Code Online (Sandbox Code Playgroud)
要添加更多上下文,调用withFilter甚至只是filter使用普通的if语句而不是使用正常的if语句有一些好处.为了理解,您可以嵌套调用map,flatmap,filter,collect等.因此,如果添加防护,您可以防止实际发生的很多af调用.例如:
for {
x <- 0 until 10
y <- 10 until 20
} {
if(x % 2 == 0) println(x*y)
}
Run Code Online (Sandbox Code Playgroud)
将实际关闭调用100次
for {
x <- 0 until 10
if x % 2 == 0
y <- 10 until 20
} println(x*y)
Run Code Online (Sandbox Code Playgroud)
这只会叫它50次,而结果保持不变.
2.)
=> 将函数/闭包的参数列表与正文分开.
这case e: NumberFormatException => None是部分功能的一部分.这里将=>"论证" e与身体分开None.
在类似于someFunction(i: (A) => Int)它的类型签名中暗示i属于该类型Function1[A,Int],请阅读"from from Ato Int".
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |