美文网首页
Scala - Loops

Scala - Loops

作者: pangolulu | 来源:发表于2016-04-17 17:31 被阅读38次

    下面给出一个Scala中while循环的例子:

    def power (x: Double, exp: Int): Double = {
      var r = 1.0
      var i = exp
      while (i > 0) { r = r * x; i = i - 1 }
      r
    }
    

    虽然在实际中不建议这么来写。
    while在Scala中是一个关键字,但是我们可不可以用一个函数来定义while呢?参考如下:

    def WHILE(condition: => Boolean)(command: => Unit): Unit =
      if (condition) {
        command
        WHILE(condition)(command)
      }
      else ()
    

    这里需要注意:

    1. conditioncommand需要按照call-by-name的方式来传,这样才能在每一次迭代中都能进行evaluate。
    2. WHILE函数是尾递归的,所以调用WHILE只需要使用常量的栈大小。

    对于for循环,Scala可以这么写:

    for (i <- 1 until 3) { System.out.print(i + " ") }
    

    for循环的翻类似于对for-expression的翻译,但是使用的是foreach函数,而不是mapflatMap
    在每个collection中都定义了一个foreach函数:

    def foreach(f: T => Unit): Unit =
      // apply ‘f‘ to each element of the collection
    

    那么,对于如下的for循环要怎么翻译呢?

    for (i <- 1 until 3; j <- "abc") println(i + " " + j)
    

    通过foreach函数,可以展开为:

    (1 until 3) foreach (i => "abc" foreach (j => println(i + " " + j)))
    

    相关文章

      网友评论

          本文标题:Scala - Loops

          本文链接:https://www.haomeiwen.com/subject/webolttx.html