关于斯卡拉的问题

Mai*_*ein 1 scala

我正在学习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.)

我总是看到以下符号,=>但他们从不解释它的作用.

有时我认为这是一个演员,但它是完全不同的东西,我希望你能搞清楚.

dre*_*xin 5

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".