Contents

Scala Note 01

Contents
  • 当对一个数取模时,可以等价 a%b=a-a/b*b
1
2
  println(-10%3)//-10%3=(-10)-(-3)*3=-10+9=-1
  println(-10%-3)//-10%-3=(-10)-(3)*-3=-10+9=-1
  • 在 scala 中支持代码块,返回值
1
2
3
  val res = {
    if (num > 1) "ok" else 100
  }
  • Scala 不支持三目运算符 , 在 Scala 中使用 if – else 的方式实现
1
  val value = if (5>4) 5 else 4
  • Scala 命令行输入
1
2
3
  val name = StdIn.readLine()
  val age = StdIn.readLine()
  val sal = StdIn.readDouble()
  • for 循环控制
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  val start = 1
  val end = 10
  for (i <- start to end) {
      println(i)
  }

  for (i <- 1 until 3) {
      println(i)
  }

  for (i <- 1 to 10 if i % 2 == 0) {
      println(i)
  }

  for (i <- 1 to 10; j = i * 10) {
      println(j)
  }

  for (i <- 1 to 9; j <- 1 to 9) {
      println(i * j)
  }

  val res = for(i <- 1 to 10) yield {
      if (i % 2 == 0) "even"
      else "odd"
  }

  // 使用花括号{}代替小括号()
  for {
      i <- 1 to 3
      j <- 1 to 3
  } {
      println(i * j)
  }

  // 控制步长
  for (i <- Range(1, 10, 2))
      println(i)
  • 与 If 语句不同,While 语句本身没有值,即整个 While 语句的结果是 Unit 类型的()
  • Scala 内置控制结构特地去掉了 break 和 continue,是为了更好的适应函数化编程
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  /**
   * A block from which one can exit with a `break`. The `break` may be
   * executed further down in the call stack provided that it is called on the
   * exact same instance of `Breaks`.
   */
  def breakable(op: => Unit) {
    try {
      op
    } catch {
      case ex: BreakControl =>
        if (ex ne breakException) throw ex
    }
  }
1
2
3
4
5
6
7
  import scala.util.control.Breaks._
  breakable {
    for (i <- 1 to 10) {
      println(i)
      if (i > 4) break  // break out of the for loop
    }
  }