青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

馭風萬里無垠

ruby學習筆記《二》

ruby的blocks和closure特性明顯有別于其它的語言,其closure本身是real closure,所綁定的context是共享的而非copy,其設計思路和lisp的相同;blocks本身則可以用于實現closure。二者的關系如下所述 (來源

Yukihiro Matsumoto: You can reconvert a closure back into a block, so a closure can be used anywhere a block can be used. Often, closures are used to store the status of a block into an instance variable, because once you convert a block into a closure, it is an object that can by referenced by a variable. And of course closures can be used like they are used in other languages, such as passing around the object to customize behavior of methods. If you want to pass some code to customize a method, you can of course just pass a block. But if you want to pass the same code to more than two methods -- this is a very rare case, but if you really want to do that -- you can convert the block into a closure, and pass that same closure object to multiple methods.
  • 7種結構

  • block方式3種
  • 隱式傳入,內部用yield調用
  
def thrice
  
yield
  
yield
  
yield
end

x
=1
thrice {x
+=2}
  • &block參數傳入,內部直接操作&block
def six_times(&block)
  thrice(
&block)
  thrice(
&block)
end
 
= 4
six_times { x 
+= 10 }
  • &block傳入,保存block為變量,然后調用block.call
def save_for_later(&b)
  @saved 
= b  # Note: no ampersand! This turns a block into a closure of sorts.
end
 
save_for_later { puts 
"Hello!" }
puts 
"Deferred execution of a block:"
@saved.call
@saved.call
這里的saved保存為main對象的一個成員,后邊實現延遲調用。
  • Proc.new/proc
@saved_proc_new = Proc.new { puts "I'm declared with Proc.new." }
@saved_proc 
= proc { puts "I'm declared with proc." }

@saved_proc_new.call
@saved_proc.call
  • lambda
@saved_lambda = lambda { puts "I'm declared with lambda." }
@saved_lambda.call
  • method
def some_method
  puts 
"I'm declared as a method."
end
@method_as_closure 
= method(:some_method)

  • 特點和差異

    • return行為

當對應的block里邊包含return的時候,上述7中方式有些許的不同:
  • lambda/method表現出真正的closure行為,僅僅返回closure本身;外部調用控制流不受影響,繼續yield或者call的下一語句執行
  • 其它幾種會跳出外部調用者的控制流,即return出調用者,yield/call之后的也不會再執行,直接跳出到最近的end外


  • arity - 參數個數校驗

對于調用點的參數檢查,呈現如下行為:
  • lambda/method嚴格校驗參數的個數,如果不匹配回拋出異常
  • 其它幾個不檢查參數個數


  • 總結

lambda/method方式呈現完備的closure行為,return之后繼續下一流程,對于實際傳入參數個數會在調用點檢查;proc/blocks方式在return的時候直接返回了外部的函數或者block,對于傳入的參數個數也沒有執行檢查。

參考:http://innig.net/software/ruby/closures-in-ruby
以上結論驗證于最新的ruby1.9.3,和鏈接中的結論有些許不同;ruby1.8中的proc函數可能有不同的行為。

posted on 2012-02-19 19:29 skyscribe 閱讀(470) 評論(0)  編輯 收藏 引用 所屬分類: Misc

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产免费| 国产精品视频免费在线观看| 日韩小视频在线观看专区| 欧美福利一区二区| 欧美成人午夜激情在线| 欧美成人精品高清在线播放| 美国成人直播| 欧美激情综合色| 亚洲麻豆视频| 亚欧成人精品| 美乳少妇欧美精品| 欧美日韩亚洲91| 国产乱码精品一区二区三区不卡 | 亚洲区第一页| 欧美福利视频| 亚洲最快最全在线视频| 欧美一区二粉嫩精品国产一线天| 欧美一级电影久久| 欧美高清你懂得| 国产农村妇女毛片精品久久莱园子| 有码中文亚洲精品| 在线视频欧美一区| 美女国产一区| 亚洲主播在线播放| 欧美99在线视频观看| 国产精品久久久久久福利一牛影视| 国内外成人免费激情在线视频网站| 亚洲欧洲精品成人久久奇米网| 亚洲网在线观看| 欧美成人日韩| 亚洲欧美视频在线观看视频| 欧美成人免费小视频| 国产日韩免费| 亚洲一区二区三区在线| 欧美成年网站| 亚洲一区二区三区激情| 美女精品一区| 国产精品人人做人人爽人人添| 伊人精品视频| 久久爱www久久做| 91久久久一线二线三线品牌| 亚洲美女黄网| 久久精品一区中文字幕| 99视频日韩| 美女视频黄a大片欧美| 国产精品视频| 最新国产成人在线观看| 亚洲尤物视频在线| 亚洲人成在线观看一区二区| 久久亚洲一区二区三区四区| 国产免费成人在线视频| 亚洲欧美日韩视频一区| 日韩天堂av| 欧美精品在线播放| 亚洲精品乱码久久久久久蜜桃91| 精品二区久久| 久久精品色图| 欧美一二三区在线观看| 国产精品午夜久久| 国产亚洲欧美日韩在线一区| 亚洲国产高清自拍| 欧美一区永久视频免费观看| 久久久久网址| 一区二区精品在线| 欧美日韩激情网| 国内精品久久久久久| av成人免费观看| 老司机精品久久| 噜噜噜躁狠狠躁狠狠精品视频 | 国产精品h在线观看| 欧美国产一区二区在线观看| 亚洲国产成人精品视频| 欧美 日韩 国产在线 | 久久成人免费电影| 亚洲第一页在线| 一区二区三区成人精品| 欧美在线日韩精品| 欧美电影在线观看完整版| 国产乱码精品1区2区3区| 亚洲欧美国产精品桃花| 亚洲人成在线观看网站高清| 欧美黄污视频| 在线观看欧美黄色| 免费成人黄色片| 国产精品二区二区三区| 亚洲视频第一页| 免费在线观看一区二区| 另类成人小视频在线| 亚洲一区二区在| 黄色另类av| 亚洲高清不卡在线| 欧美日韩小视频| 久久gogo国模裸体人体| 久久综合精品国产一区二区三区| 一区二区三区www| 欧美一区二区三区久久精品| 日韩视频在线观看| 久久爱另类一区二区小说| 日韩系列在线| 久久精品国产亚洲精品| 亚洲大胆人体在线| 亚洲午夜日本在线观看| 在线观看av一区| 亚洲欧美另类中文字幕| 亚洲日本一区二区三区| 亚洲永久字幕| 99日韩精品| 欧美一区二区在线免费播放| 中文网丁香综合网| 久久综合九色九九| 亚洲欧美一区二区三区极速播放 | 欧美**字幕| 欧美激情综合五月色丁香小说| 欧美一区二区精品| 欧美日韩国产黄| 欧美国产激情| 在线精品国精品国产尤物884a| 午夜激情一区| 欧美一区日韩一区| 国产精品都在这里| av成人福利| 9色国产精品| 欧美伦理一区二区| 亚洲人成人一区二区三区| 91久久精品久久国产性色也91| 性欧美暴力猛交另类hd| 欧美在线国产精品| 国产精品视频久久久| 一区二区三区四区五区精品| 中文欧美在线视频| 国产精品99一区| 亚洲色图在线视频| 亚洲在线一区二区| 国产精品裸体一区二区三区| 亚洲一本视频| 久久久xxx| 精品成人在线视频| 老司机精品福利视频| 亚洲国产精品第一区二区| 亚洲欧洲日本一区二区三区| 欧美黄色网络| 中文一区二区| 久久精品综合网| 亚洲国产日韩美| 欧美美女喷水视频| 亚洲无限av看| 欧美综合激情网| 久久九九电影| 欧美在线日韩| 欧美成人午夜| 亚洲乱码精品一二三四区日韩在线 | 久久久91精品国产一区二区三区| 国产酒店精品激情| 久久激情中文| 亚洲精品1234| 午夜在线视频观看日韩17c| 国产日韩欧美亚洲| 久久综合九色综合欧美狠狠| 亚洲国产美女| 午夜在线不卡| 亚洲国产精品一区二区第四页av| 欧美成人情趣视频| 这里只有精品丝袜| 久久综合色影院| 中国成人亚色综合网站| 国产精品亚洲一区二区三区在线| 久久久久久久久岛国免费| 亚洲精品久久久久久久久久久久久 | 欧美成人激情视频免费观看| 日韩亚洲在线观看| 国产欧美日韩综合一区在线观看 | 男女激情视频一区| 一区二区三区欧美亚洲| 国产欧亚日韩视频| 欧美激情视频给我| 欧美有码在线观看视频| 亚洲欧洲日夜超级视频| 久久精品国产久精国产爱| 日韩一级大片在线| 今天的高清视频免费播放成人| 欧美日韩在线大尺度| 麻豆成人精品| 欧美一区二区三区在线观看| 99re6热在线精品视频播放速度| 麻豆乱码国产一区二区三区| 欧美一级午夜免费电影| 亚洲最新在线| 亚洲国产欧美在线人成| 国语自产在线不卡| 国产精品中文字幕欧美| 欧美日韩亚洲高清| 欧美va天堂| 老司机一区二区| 久久久久91| 久久精品女人的天堂av| 午夜一级久久| 午夜精品理论片| 亚洲字幕一区二区| 亚洲性夜色噜噜噜7777| 亚洲无限av看|