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
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章