<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    byterat

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      54 隨筆 :: 0 文章 :: 15 評論 :: 0 Trackbacks

    有這樣一個函數, 它接受一個函數(或者說閉包)作為參數:

    object Timer{
      def oncePerSecond(callback: () => unit): unit = {
        while (true){
          callback()
          Thread.sleep(1000)
        }
      }

      def timeFlies(): unit = { 
        Console.println("Time flies when you're having fun(ctionally)...");
      }

      def main(args: Array[String]): unit = {
        oncePerSecond(timeFlies)
      }
    }

    觀察函數oncePerSecond, 它的參數callback被定義為" () => unit", 表示callback接受一個函數, 并且這個函數
        1. 不能帶參數; 因為"()"
        2. 返回值的類型為unit, 即沒有返回值; 因為" => unit", "=>" 表示返回值, "unit"表示返回值的類型

    再觀察函數timeFlies, 它滿足以上兩個條件, 因此, 可以這么調用: oncePerSecond(timeFlies)




    匿名函數

    更進一步, 我們可以不用聲明函數timeFiles, 而直接將它的主體作為參數傳遞給oncePerSecond:

      def timeFlies(): unit = { 
        Console.println("Time flies when you're having fun(ctionally)...");
      }

      進一步簡化為匿名函數, 或者說是閉包, 或者說是code block:

      () => Console.println("Time flies when you're having fun(ctionally)..."


      調用匿名函數:

      oncePerSecond(() => Console.println("Time flies... oh, you get the idea."))




    更典型的例子


    觀察下面的scala代碼:

    object HelloWorld{
      def main(args: Array[String]): unit = {
        args.filter( (arg:String) => arg.startsWith("G") )
            .foreach( (arg:String) => Console.println("Found " + arg) )
      }
    }


    1. 函數main的參數是Array類型的String數組 args: Array[String]
    2. Scala數組有一個方法filter, 方法filter(b)返回一個符合某個條件b的數組
       
        args.filter( (arg:String) => arg.startsWith("G") )

       和上面的匿名函數一樣, 紅色部分也是一個匿名函數, 不同的是, 該函數接受一個String值,并且返回一個boolean值:
       
        (arg:String) => arg.startsWith("G")

        在args.filter()函數的圓括號內, arg:String 表示枚舉args中的每一個值. arg.startsWith("G")是Java的String類型的函數, 因此, 這個匿名函數的含義是:
        從args中, 返回一個字符串數組, 并且這個字符串數組的字符串,都是以字符"G"開頭的.

       和args.filter()一樣, foreach也是Scala數組的一個方法.








    posted on 2008-05-30 15:19 比特鼠 閱讀(3986) 評論(0)  編輯  收藏 所屬分類: Scala
    主站蜘蛛池模板: 亚洲免费中文字幕| 一级特黄aa毛片免费观看| 免费看美女让人桶尿口| 亚洲国产日韩在线成人蜜芽| 一个人免费日韩不卡视频| 亚洲人成在线电影| 8x网站免费入口在线观看| 亚洲特级aaaaaa毛片| 国产成人免费网站| 亚洲高清国产拍精品熟女| 国产免费牲交视频| 人妻18毛片a级毛片免费看| 在线A亚洲老鸭窝天堂| 国产在线播放线91免费| 亚洲春色在线视频| 18禁止看的免费污网站| 亚洲免费在线视频播放| 成年女人免费视频播放77777 | 三级黄色在线免费观看| 亚洲精品tv久久久久久久久| 无码A级毛片免费视频内谢| 亚洲无人区视频大全| 免费特级黄毛片在线成人观看| 无套内谢孕妇毛片免费看看| 久久亚洲国产成人精品无码区| 一个人免费视频观看在线www | 久久www免费人成看片| 亚洲国产乱码最新视频| 亚洲国产精品碰碰| 久久精品成人免费网站| 日韩亚洲国产综合高清| 相泽亚洲一区中文字幕| 久视频精品免费观看99| 精品在线视频免费| 亚洲日本在线看片| 日本高清免费网站| 一级毛片**不卡免费播| 国产亚洲视频在线观看| 久久精品国产精品亚洲艾| 日本媚薬痉挛在线观看免费| 午夜精品一区二区三区免费视频 |