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

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

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

    byterat

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      54 隨筆 :: 0 文章 :: 15 評(píng)論 :: 0 Trackbacks

    有這樣一個(gè)函數(shù), 它接受一個(gè)函數(shù)(或者說(shuō)閉包)作為參數(shù):

    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)
      }
    }

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

    再觀察函數(shù)timeFlies, 它滿足以上兩個(gè)條件, 因此, 可以這么調(diào)用: oncePerSecond(timeFlies)




    匿名函數(shù)

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

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

      進(jìn)一步簡(jiǎn)化為匿名函數(shù), 或者說(shuō)是閉包, 或者說(shuō)是code block:

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


      調(diào)用匿名函數(shù):

      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. 函數(shù)main的參數(shù)是Array類型的String數(shù)組 args: Array[String]
    2. Scala數(shù)組有一個(gè)方法filter, 方法filter(b)返回一個(gè)符合某個(gè)條件b的數(shù)組
       
        args.filter( (arg:String) => arg.startsWith("G") )

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

        在args.filter()函數(shù)的圓括號(hào)內(nèi), arg:String 表示枚舉args中的每一個(gè)值. arg.startsWith("G")是Java的String類型的函數(shù), 因此, 這個(gè)匿名函數(shù)的含義是:
        從args中, 返回一個(gè)字符串?dāng)?shù)組, 并且這個(gè)字符串?dāng)?shù)組的字符串,都是以字符"G"開(kāi)頭的.

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








    posted on 2008-05-30 15:19 比特鼠 閱讀(3995) 評(píng)論(0)  編輯  收藏 所屬分類: Scala
    主站蜘蛛池模板: 亚洲AV天天做在线观看| 免费观看成人毛片a片2008| 亚洲av片一区二区三区| 亚洲国产aⅴ成人精品无吗| 女人被男人躁的女爽免费视频 | 亚洲欧洲日韩国产综合在线二区| 4hu四虎免费影院www| www.91亚洲| 一级毛片成人免费看a| 亚洲精品一级无码鲁丝片| ssswww日本免费网站片| 亚洲色精品aⅴ一区区三区| 巨胸喷奶水www永久免费| 亚洲级αV无码毛片久久精品| 中文字幕乱码一区二区免费| 久久亚洲国产中v天仙www | 在线看免费观看AV深夜影院| 亚洲熟妇无码爱v在线观看| 五月婷婷综合免费| 亚洲av无码专区在线电影| 免费一级黄色毛片| 成人自慰女黄网站免费大全| 久久精品亚洲日本佐佐木明希| 久久精品免费电影| 国产v亚洲v天堂a无| 国产精品久久久久影院免费| 一级人做人爰a全过程免费视频| 亚洲s色大片在线观看| 18国产精品白浆在线观看免费| 亚洲精品伦理熟女国产一区二区 | 亚洲香蕉免费有线视频| 青春禁区视频在线观看直播免费| 亚洲精品伦理熟女国产一区二区| 亚洲精品无码成人片在线观看| 久久久久久免费一区二区三区| 亚洲人成免费电影| 亚洲国产综合精品中文字幕| 91大神在线免费观看| 亚洲AV无码一区二区三区电影| 美腿丝袜亚洲综合| 噼里啪啦免费观看高清动漫4|