Scala_控制结构

控制结构

if条件表达式

  val x = 6
 if (x>0){
   println("This is a positive number")
}else if(x==0){
   println("This is not a zero")
}else{
   println("This is not a positive number")
}
  • 有一点与Java不同的是,Scala中的if表达式的值可以赋值给变量

val y = 6
val a = if (y  > 0) 1 else -1

scala> val x = 1
x: Int = 1
scala> val z = if(x > 0) 1 else "error"
z: Any = 1

scala> val x = -1
x: Int = -1
scala> val z = if(x > 0) 1 else "error"
z: Any = error

scala> val x = -1
x: Int = -1
scala> val z = if(x > 0) 1
z: AnyVal = ()
scala> val z = if(x > 0) 1 else()
z: AnyVal = ()

while循环

scala> var i = 9
i: Int = 9
scala> while (i > 0){
    | i -= 1
    | printf("i is %d\n" , i)
    | }
i is 8
i is 7
i is 6
i is 5
i is 4
i is 3
i is 2
i is 1
i is 0

scala> var i = 0
i: Int = 0
scala> do {
    | i += 1
    | println(i)
    | } while (i < 5)
1
2
3
4
5

for循环

  • 格式

for (变量 <- 表达式) 语句块
//其中,“变量<-表达式”被称为“生成器(generator)”
scala> for (i <- 1 to 5) println(i)
1
2
3
4
5
scala> for (i <- 1 to 5 by 2) println(i)
1
3
5
  • 不希望打印出所有的结果,过滤出一些满足制定条件的结 果,需要使用到称为“守卫(guard)”的表达式

  • 比如,只输出1到5之中的所有偶数,可以采用以下语句

scala> for (i <- 1 to 5 if i % 2 == 0) println(i)
2
4
  • Scala也支持“多个生成器”的情形,可以用分号把它们 隔开,比如:

scala> for (i <- 1 to 5 ; j <- 1 to 3) println(i*j)
1
2
3
2
4
6
3
6
9
4
8
12
5
10
15
  • 可以给每个生成器都添加一个“守卫”,如下:

scala> for (i <- 1 to 5 if i % 2 == 0 ; j <- 1 to 3 if j != i) println(i*j)
2
6
4
8
12
for推导式
  • Scala的for结构可以在每次执行的时候创造一个值,然后将包含了所有产生值的集合作为for循环表达式的结果返回, 集合的类型由生成器中的集合类型确定

  • 通过for循环遍历一个或多个集合,对集合中的元素进行“推导”,从而计算得到新的集合,用于后续的其他处理

  • 格式:

for (变量 <- 表达式) yield {语句块}
scala> val r = for (i <- 1 to 5 if i%2 == 0) yield {println(i); i}
2
4
r: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4)
posted on 2019-03-03 16:39  0x153_小波  阅读(178)  评论(0编辑  收藏  举报