Scala yield关键字
yield 关键字将在完成循环迭代后返回一个结果。for循环在内部使用缓冲区来存储迭代的结果,当完成所有的迭代后,会从缓冲区中产生最终的结果。它的工作方式与指令性循环不同。返回的集合的类型与我们倾向于迭代的类型相同,因此Map会产生Map,List会产生List,以此类推。
语法
var result = for{ var x <- List}
yield x
注意: 大括号用来保持变量和条件,结果是一个变量,所有x的值都保持在集合的形式中。
例子
// Scala program to illustrate yield keyword
// Creating object
object GFG
{
// Main method
def main(args: Array[String])
{
// Using yield with for
var print = for( i <- 1 to 10) yield i
for(j<-print)
{
// Printing result
println(j)
}
}
}
输出
1
2
3
4
5
6
7
8
9
10
在上面的例子中,与yield语句一起使用的for循环实际上创建了一个列表的序列。
例子
// Scala program to illustrate yield keyword
// Creating object
object GFG
{
// Main method
def main(args: Array[String])
{
val a = Array( 8, 3, 1, 6, 4, 5)
// Using yield with for
var print=for (e <- a if e > 4) yield e
for(i<-print)
{
// Printing result
println(i)
}
}
}
输出
8
6
5
在上面的例子中,for循环中使用的yield语句实际上创建了一个数组。因为我们说yield e,它是一个Array[n1, n2, n3, ....]
。e <- a
是我们的生成器, if (e > 4)
可能是一个防护措施,过滤掉那些似乎不大于4的数字。