Scala巢狀函式

2019-10-16 23:14:39

Scala允許您定義函式內部的函式,而在其他函式中定義的函式稱為區域性函式。這是一個階乘計算器的實現,我們使用傳統的技術來呼叫第二個巢狀方法來完成工作。

嘗試以下程式來了解如何實現巢狀函式。

範例

object Demo {
   def main(args: Array[String]) {
      println( factorial(0) )
      println( factorial(1) )
      println( factorial(2) )
      println( factorial(3) )
   }

   def factorial(i: Int): Int = {
      def fact(i: Int, accumulator: Int): Int = {
         if (i <= 1)
            accumulator
         else
            fact(i - 1, i * accumulator)
      }
      fact(i, 1)
   }
}

將上述程式儲存在原始檔:Demo.scala中,使用以下命令編譯和執行此程式。

$ scalac Demo.scala
$ scala Demo

1
1
2
6

像許多語言中的區域性變數宣告一樣,巢狀方法僅在封閉方法中可見。如果您嘗試在factorial()之外呼叫fact(),則會在編譯器時出現錯誤。