Scala:语句不按顺序执行

时间:2014-07-21 11:34:15

标签: scala

我正在学习scala我尝试了以下程序

package com.avdongre

object MyModule {
  def abs(n: Int): Int =
    if (n < 0) -n
    else n
  private def formatAbs(x: Int) = {
    val msg = "The absolute value of %d is %d"
    msg.format(x, abs(x))
  }

  def factorial(n: Int): Int = {
    def go(n: Int, acc: Int): Int =
      if (n <= 0) acc
      else go(n - 1, n * acc)
    go(n, 1)
  }
  def main(args: Array[String]): Unit =    
    println(formatAbs(-42))
    println(factorial(5))

}

我得到以下输出

120
The absolute value of -42 is 42

为什么首先调用factorial

1 个答案:

答案 0 :(得分:6)

你需要围绕main身体的花括号:

def main(args: Array[String]): Unit = {
  println(formatAbs(-42))
  println(factorial(5))
}

发生的事情是你有这个(为了清楚起见,修正了缩进):

def main(args: Array[String]): Unit = 
  println(formatAbs(-42))

println(factorial(5))

因此,当对象MyModule被初始化时,正文的最后一个语句是println(factorial(5)),它出现在之前 main方法。