Scala学习三:循环

Scala学习三:循环


Scala 循环

Scala中有for,while两种形式
while循环的方式与Java中的一样,不再赘述.

Scala中没有Java的

for(变量声名; 条件控制; 变量控制)

只有

    for(n <- 1 to n) 
        // 包含n值
    // 及 
    for(n <- 1 until n)
        // 不包含n值

Scala for循环中的变量名前不需要val,var。类型是集合中的变量类型。作用域郁着循环结束。

Scala中没有break, continue来退出,控制循环.

import scala.util.control.Breaks._
breakable {
    for (...) {
        if (...) {
            break
        }
    }
}

breakable 必须完全包裹住整个for循环块,否则将不能退出循环。
break 跳出循环是通过抛出 和 捕获 异常来完成的。对于时间要求很高的情况,应减少使用。


高级for循环形式:

Scala的for循环可以有多个 变量<-表达式 形式的生成器,每个生成器之间用 “;” 隔开

// Scala代码
for(outer <- 1 to 3; inner <- 1 to 3){
    println(10 * outer + inner)
}
// Java代码
// 其作用就相当于Java的双层for循环
for(int outer = 1; outer <= 3; outer++){
    for(int inner = 1; inner <= 3; inner++){
        System.out.println( 10 * outer + inner)
    }
}

for循环生成器守卫:

// Scala代码:
// 同时每个生成器可以带一个守卫:
for(outer <- 1 to 5 if outer % 2 != 0; inner <- 1 to 5 if inner % 2 == 0){
    println(10 * outer + inner)
}

其作用就相当于Java的双层for循环:

// Java代码:
for(int outer = 1; outer <= 5; outer++){
    if(outer % 2 != 0){
        for(int inner = 1; inner <= 5; inner++){
            if(inner % 2 == 0){
                System.out.println( 10 * outer + inner)
            }
        }
    }
}

而且还可以使用任意多的定义,引用可以在循环中使用的变量:

for(outer <- 1 to 5; middle = 6 - outer ; inner <- middle to 5) {
    println(10 * outer + inner)
}

for yield:

如果For循环体内以yield开始,则循环会构成一个集合,每次迭代生成集合中的一个值

val col = for(a < 1 to 5) yield {
    "Word" + a
}
// col是一个集合:IndexedSeq[String]

错误的写法,如果返回集合。yield必须紧跟for循环表达式。

for(a < 1 to 5){
    yield {
        "Word" + a
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章