关于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)

2.)

我总是看到下面的符号=>但他们从不解释它做了什么。

有时候我认为这是演员阵容,但是这是一个完全不同的东西,我希望你能清理一些事情。


1.)是的,这是有区别的,如果你在闭包中的正常if语句被传递给理解,那么它是第一个。 第二个是实际的后卫。 在调用foreach之前,它实际上会在范围内调用withFilter 。 所以这两件事的翻译将如下所示:

0.to(10).foreach(i => if(i % 2 == 0) println(i) )
0.to(10).withFilter(x => x % 2 == 0).foreach(i => println(i))

要添加更多的上下文,使用withFilter或者甚至只是filter而不是使用正常的if语句有一些好处。 在理解中,您可以嵌套调用映射,平面映射,过滤器,收集等,所以如果添加警卫,可以防止实际发生的呼叫。 例如:

for {
  x <- 0 until 10
  y <- 10 until 20
} {
  if(x % 2 == 0) println(x*y)
}

将实际关闭100次

for {
  x <- 0 until 10
  if x % 2 == 0
  y <- 10 until 20
} println(x*y)

这将只调用它50次,而结果保持不变。

2.)

=>将函数/闭包的参数列表从正文中分离出来。

这种case e: NumberFormatException => None是部分函数的一部分。 在这里, =>分离“参数” e从身体None

在类型签名中,像someFunction(i: (A) => Int)它暗示iFunction1[A,Int] ,读取“从AInt函数”。

链接地址: http://www.djcxy.com/p/72847.html

上一篇: Questions about scala

下一篇: What does the arrow in an import statement do?