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

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

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

    posts - 110,  comments - 152,  trackbacks - 0

    我眼中的“閉包”

    • 接觸閉包
      •        接觸編程以來,接觸過好幾種編程語言中都提到了閉包這個語言特性,Javascript,Ruby,Perl。最近在看關于Groovy的 時候也突出談了閉包這個特性。Search了一下各大搜索引擎,發現Java里面也開始討論要不要在后續版本里面加入閉包的特性了。由此可見閉包這個特 性,如何的吸引人。閑話少說,直接來看閉包吧!
                下面的主要內容來源于各個搜索引擎。我只是整理了一下,找出一個最便于我自己理解的版本表述如下,可能在你看來這些理解是有失偏頗的,請你不要吝惜的告訴我。參考資料列表會附在后面,有興趣可以直接讀那些資料。

    • 什么是閉包
      • 閉包的概念,不同資料給出了好幾種。
      • 閉包:包含了自由(未綁定)變量的代碼塊,這些變量不是在這個代碼塊中或者任何全局上下文中定義的,而是定義代碼塊的環境中定義的。也就是下面兩部分:
        • 要執行的代碼塊(由于自由變量存在,相關變量引用沒有釋放)
        • 為自由變量提供綁定的計算環境(作用域)
      • 閉包:一種函數對象或者匿名函數,作為參數傳遞,可以動態的創建與返回
      • 閉包:具有閉合作用域的匿名函數
        • 第一層理解:閉包是具有特別作用域規則且可以作為參數的代碼塊
          • 代碼說明:
            3.times {puts "Inside the times method."}

            Results:
            Inside the times method.
            Inside the times method.
            Inside the times method.

        • 第二層理解:給上述的代碼塊擴展一個參數列表,使方法或函數可以與這個代碼通訊
          • 代碼說明:
            ['lions', 'tigers', 'bears'].each {|item| puts item}

            Results:
            lions
            tigers
            bears
        • 第三層理解:將這樣的代碼塊作為參數傳遞
          • 代碼說明:
            animals = ['lions', 'tigers', 'bears'].collect {|item| item.upcase}
            puts animals.join(" and ") + " oh, my."

            LIONS and TIGERS and BEARS oh, my.

        • 第四層理解:定義代碼塊的環境的名稱空間和使用它的函數之間的作用域本質上是一個作用域,即:作用域是閉合的
          • 代碼說明:
            tax = 0.08
            prices = [4.45, 6.34, 3.78]
            tax_table = prices.collect {|price| {:price => price, :tax => price * tax}}
            tax_table.collect {|item| puts "Price: #{item[:price]}    Tax: #{item[:tax]}"}

            Results:
            Price: 4.45    Tax: 0.356
            Price: 6.34    Tax: 0.5072
            Price: 3.78    Tax: 0.3024

      • 按照SCIP定義:閉包就是一個攜帶有本地狀態的函數
    • 我對閉包的理解
      • 閉包具有函數的性質
        • 能完成一定的功能的代碼塊
        • 能夠預定義參數和引用作用域中的參數
        • 能夠在需要的地方被調用
      • 閉包可以看成對象
        • 能夠作為參數傳遞
      • 作用域的作用
        • 作用域設定一個運行空間,但是作用域本身也很無賴,作用域知道自己能干什么,但是不知道具體要怎么做。只要作用域真正要用的時候,見到了閉包里面的代碼塊,作用域才算功德圓滿了。這就是所謂“動態”的一種體現吧
        • 作用域決定了閉包中代碼塊的使用方法
        • 作用域決定了閉包中預設參數的本質,如參數的個數,類型
          • 疑問:還沒有搞清楚一個問題,在這里請教一下知道的  
            在閉包里面作用域提供的參數 是怎么和閉包里面預設的參數一一對應起來的呢?見下面代碼
            printMapClosure = {| key, value| puts key + "=" + value }
            [ "yue" : "wu", "lane" : "burks", "sudha" : "saseethiaseeleethialeselan" ].each(printMapClosure)
            result:yue=wu
            lane=burks
            sudha=saseethiaseeleethialeselan
            我想知道為什么 key就對應yue,lane,sudha呢?而value就會對應wu,burks,sasee...呢?
            不要告訴我是語義匹配這么高深的回答。呵呵  希望知道的人能給我說明白了怎么回事啊?指給我一些資料我也感激不盡啊。

        • 作用域決定了閉包的最終處理結果
      • 總結:閉包是一種被作用域限制的函數對象
    • 另附:未來Java可能會采用的兩種閉包形式
      • BGGA方案
        • 說明:擴展了類型系統,引入了 function 類型,即函數都帶有一個類型參數列表、返回類型和 throws 子句。

          代碼:完成求平方和
          sumOfSquares = mapReduce(myBigCollection,
          { Double x => x * x },
          { Double x, Double y => x + y });

      • CICE方案
        • 說明:通過定義更簡化的內部類來完成對閉包的支持

          代碼:完成求平方和
          Double sumOfSquares = mapReduce(myBigCollection,
          UnaryFunction<Double>(Double x) { return x*x; },
          BinaryFunction<Double, Double>(Double x, Double y) { return x+y; });

    • 附,參考資料
      • Java語言與實踐:閉包之爭 http://www.ibm.com/developerworks/cn/java/j-jtp04247.html

        跨越邊界:閉包 http://www.ibm.com/developerworks/cn/java/j-cb01097.html

        MartinFowler說閉包
        http://blog.csdn.net/limux/archive/2005/07/05/413911.aspx (中文)
        http://martinfowler.com/bliki/Closure.html(英文)



    平凡而簡單的人一個,無權無勢也無牽無掛。一路廝殺,只進不退,死而后已,豈不爽哉!
    收起對“車”日行千里的羨慕;收起對“馬”左右逢緣的感嘆;目標記在心里面,向前進。一次一步,一步一腳印,跬步千里。
    這個角色很適合現在的


    posted on 2007-09-19 17:45 過河卒 閱讀(2157) 評論(7)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    文章來自: http://www.blogjava.com/ponzmd/ (彭俊-過河卒) 轉貼請聲明!
    訪問統計:
    主站蜘蛛池模板: 好爽又高潮了毛片免费下载 | 精品亚洲AV无码一区二区| 57PAO成人国产永久免费视频| 中文字幕日韩亚洲| 日韩久久无码免费毛片软件| 免费欧洲美女牲交视频| 日韩一卡2卡3卡4卡新区亚洲| 日韩免费高清一级毛片| 亚洲日韩中文字幕日韩在线 | 亚洲Av无码乱码在线观看性色| 亚洲av无码专区在线电影| 中文字幕日本人妻久久久免费| 亚洲日产韩国一二三四区| 亚洲精品无码专区久久| 免费高清在线影片一区| 国产成人高清亚洲一区91| 亚洲一级Av无码毛片久久精品| 国产高清视频免费在线观看| 亚洲色无码一区二区三区| a级毛片毛片免费观看久潮喷| 亚洲国产精品久久久久久| 一区二区免费电影| 一二三四在线播放免费观看中文版视频 | 最近最好最新2019中文字幕免费| 99久在线国内在线播放免费观看 | 色偷偷亚洲女人天堂观看欧| 免费在线观影网站| 亚洲天堂在线播放| 成年女人毛片免费视频| 91精品国产亚洲爽啪在线观看| 亚洲国产精品免费观看| 中文字幕在线观看亚洲| 免费看国产精品3a黄的视频| 老汉色老汉首页a亚洲| AAA日本高清在线播放免费观看| 亚洲黄色免费电影| 日韩免费视频观看| 亚洲欧洲免费无码| 国产亚洲大尺度无码无码专线 | 日本卡1卡2卡三卡免费| 亚洲最大的成人网站|