scala教程:for循环语句

介绍

scala的for循环语句,与java不同,需要全新理解,但理解起来比较简单

Scala 为 for 循环语句提供了非常多的特性,这些 for 循环的特性被称为: for 推导式 或 for 表达式

循环(to)

// i 表示循环的变量。从 0 取值,一直到 3 ,前后闭合
for (i <- 0 to 3){
  println(i+" hello world")
}

执行结果:

0
1
2
3

to 的本质

for 语句中的 to 不是关键字,而是 Int对象的方法,全写 如下:

for (i <- 0.to(3)){
  println(i+" hello world")
}

在scala中,调用对象的方法可以将 . 替换成 空格,如下:

for( i <- 0 to(3) ){
  println( i )
}

如果参数只有一个,那么 () 也可以省略,方法和参数中间要有 空格

for( i <- 0 to 3){
  println( i )
}

例子:

val a="hello"
println(a substring 3) // . 替换成 空格,小括号可以省略

执行结果:

lo

循环(until)

// i 是从 0 到 2 ,即:前闭后开
for (i <- 0 until 3){
  println(i+" hello world")
}

解释:

这种方式和前面的区别在于 i 是从 1 到 3-1 ,即:前闭后开

循环步长

for (i <- 1 to 10 by 2) {
    println("i=" + i)
}

解释: by 表示步长。可以是正整数,负整数,可以大于 循环的最大值

by的本质

by 不是关键字,是方法,全写如下:

for (i <- 1.to(10).by(2)) {
  println("i=" + i)
}

在scala中,调用对象的方法可以将 . 替换成 空格
如果参数只有一个,那么 () 也可以省略,方法和参数中间要有 空格

可以是负数

for ( i<- 0 to -10 by -2){
  println(i)
}

执行结果:

0
-2
-4
-6
-8
-10

步长不能是0,否则会报错

for (i <- 1 to 10 by 0) {
    println("i=" + i)
}

报错如下:

java.lang.IllegalArgumentException: step cannot be 0.

嵌套循环

例子:

for(i <- 1 to 3; j <- 1 to 3) {
 println(" i =" + i + " j = " + j)
}

说明:没有关键字,所以范围后一定要加;来隔断逻辑

上面的代码等价

for (i <- 1 to 3) {
 for (j <- 1 to 3) {
   println("i =" + i + " j=" + j)
 }
}

引入变量

for(i <- 1 to 3; j = 4 - i) {
 println("i=" + i + " j=" + j)
}

说明:
for 推导式一行中有多个表达式时,要加 ; 区分

上面的代码等价于

for (i <- 1 to 3) {
 var j = 4 - i
 println("i=" + i + " j=" + j)
}

约定

for 推导式有一个不成文的约定:当 for 推导式包含多个表达式时,一般 每行一个表达式,并用 花括号 {} 代替小括号 ()

上面代码改写如下:

for {
 i <- 1 to 3
 j = 4 - i
} {
 println("i=" + i + " j=" + j)
}

循环守卫

循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为 false 则跳过

例子

for(i <- 1 to 3 if i != 2) {
    print(i + " ")
}

相当于下面写法:

for (i <- 1 to 3){
    if (i != 2) {
        print(i + " ")
    }
}

原文出处:/show_1IX19bHLfhBX.html