Scala之旅(TOUR OF SCALA)——FOR 关键字的理解(FOR COMPREHENSIONS)

Scala 提供了一个轻量级的 for 来表达序列的理解。理解从 for (enumerators) yield e 结构开始,enumerators 指得是一个分号分隔列表的迭代。每次迭代既会产生一个新变量,又是一个过滤器。 e 的理解就是迭代中的每一个序列中的值。

这段不是很理解,所以帖出原文,希望指正

Scala offers a lightweight notation for expressing sequence comprehensions. Comprehensions have the form for (enumerators) yield e, where enumerators refers to a semicolon-separated list of enumerators. An enumerator is either a generator which introduces new variables, or it is a filter. A comprehension evaluates the body e for each binding generated by the enumerators and returns a sequence of these values.

这里有一个例子:

case class User(val name: String, val age: Int)

val userBase = List(new User("Travis", 28),
  new User("Kelly", 33),
  new User("Jennifer", 44),
  new User("Dennis", 23))

val twentySomethings = for (user <- userBase if (user.age >=20 && user.age < 30))
  yield user.name  // i.e. add this to a list

twentySomethings.foreach(name => println(name))  // prints Travis Dennis

拥有 yield 声明的 for 循环返回了一个 List 。因为我们知道 yield user.name 是一个 List[String]user <- userBase 是迭代器,if (user.age >= 20 && user.age < 30) 是过滤器,让过滤出的用户都是20多岁。

这里有一个更加复杂的例子,它使用了两个迭代器。计算了所有在 0n-1 之间和等于 v 的组合。

猜你喜欢

转载自blog.csdn.net/cuipp0509/article/details/79412014