介绍
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 + " ")
}
}