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

馭風萬里無垠

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年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

導航

統計

常用鏈接

留言簿(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>
            另类尿喷潮videofree| 亚洲高清中文字幕| 国模 一区 二区 三区| 国产精品美女视频网站| 国产精品国产馆在线真实露脸| 欧美激情国产日韩| 一区二区欧美在线观看| 欧美日韩精品免费看| 欧美体内she精视频在线观看| 欧美日韩伦理在线| 国产精品一区二区三区成人| 国产在线国偷精品产拍免费yy| 激情久久综合| 一本一本久久| 久久成人亚洲| 欧美国产日本在线| 99视频一区二区三区| 亚洲欧美日韩国产综合精品二区| 久久久国产一区二区| 欧美日韩精品福利| 国产小视频国产精品| 日韩视频免费观看| 久久久精品一区二区三区| 欧美激情第三页| 亚洲欧美日韩久久精品| 欧美高清在线视频观看不卡| 国产精品亚洲视频| 亚洲人成久久| 欧美在线精品免播放器视频| 亚洲国产精品综合| 欧美亚洲在线播放| 欧美日韩四区| 亚洲激情网站免费观看| 欧美一区二区成人6969| 欧美高清视频一区二区| 国产一区二区三区免费不卡| av成人免费在线| 米奇777在线欧美播放| 亚洲视频久久| 欧美日韩国产成人在线| 精品不卡视频| 欧美在线www| 一区二区三区欧美日韩| 欧美高清视频一区| 亚洲激情综合| 免费亚洲一区| 久久久www成人免费精品| 国产精品黄视频| 一本色道久久综合亚洲91| 欧美69wwwcom| 欧美亚洲午夜视频在线观看| 欧美午夜久久| 亚洲一区二区在线观看视频| 亚洲黄色一区| 欧美第一黄色网| 亚洲高清网站| 欧美激情久久久| 麻豆亚洲精品| 亚洲人被黑人高潮完整版| 欧美电影美腿模特1979在线看| 久久精品国产2020观看福利| 国产一区二区无遮挡| 久久久久青草大香线综合精品| 午夜精品久久久久99热蜜桃导演| 欧美大片在线看| 欧美福利影院| 牛人盗摄一区二区三区视频| 在线国产亚洲欧美| 欧美岛国在线观看| 欧美黄色aa电影| 一本久道久久综合狠狠爱| 亚洲欧洲精品一区二区精品久久久| 老司机免费视频久久| 亚洲区一区二| 99这里只有精品| 国产精品免费一区豆花| 久久精品国内一区二区三区| 久久久久国产免费免费| 亚洲黄色精品| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲欧洲日韩综合二区| 亚洲电影第1页| 欧美日本在线播放| 亚洲欧洲av一区二区| 欧美一区二区精美| 亚洲盗摄视频| 亚洲免费观看| 国产日韩欧美a| 欧美成人午夜激情| 欧美色综合网| 久久午夜电影网| 欧美日韩精品伦理作品在线免费观看| 亚洲欧美另类在线| 久久亚洲综合色一区二区三区| 日韩一本二本av| 午夜在线精品| 亚洲人精品午夜| 亚洲一区二区在线观看视频| 狠狠久久亚洲欧美专区| 亚洲精品1区| 国产亚洲成精品久久| 亚洲激情国产| 国产一区二区三区奇米久涩| 亚洲国产精品一区二区第四页av| 国产九九视频一区二区三区| 欧美成人精品在线播放| 国产精品美女久久久浪潮软件 | 欧美极品aⅴ影院| 久久国产精品毛片| 欧美精品一区二区三区一线天视频 | 国产免费亚洲高清| 亚洲激情婷婷| 狠狠色狠狠色综合日日小说| 欧美日韩精品一区| 一个色综合导航| 久久麻豆一区二区| 亚洲永久免费| 欧美日韩国产三级| 欧美成人精精品一区二区频| 国产午夜精品在线观看| 亚洲一本大道在线| 国产精品99久久久久久宅男 | 久久女同互慰一区二区三区| 亚洲在线一区二区| 欧美日韩99| 亚洲电影一级黄| 有码中文亚洲精品| 久久成人精品| 久久精品国产精品亚洲精品| 国产精品r级在线| 日韩天天综合| 一区二区三区视频在线观看 | 在线精品视频一区二区三四| 亚洲女性裸体视频| 香蕉久久国产| 国产精品无码永久免费888| 亚洲精品视频中文字幕| 99re成人精品视频| 欧美激情综合色| 亚洲精品国产精品久久清纯直播| 亚洲国产精品黑人久久久| 久久福利精品| 麻豆久久婷婷| 亚洲精品网站在线播放gif| 欧美不卡三区| 亚洲美女视频| 亚洲欧美日本视频在线观看| 国产精品久久波多野结衣| 亚洲午夜激情网站| 久久精品人人爽| 亚洲第一毛片| 欧美精品一级| 亚洲一区一卡| 麻豆成人综合网| 99综合在线| 国产精品自拍网站| 久久青草久久| 日韩系列在线| 久久精品国内一区二区三区| 亚洲国产成人一区| 欧美日韩中文字幕在线视频| 欧美亚洲免费在线| 亚洲成色777777在线观看影院| aa国产精品| 国产亚洲视频在线| 欧美激情视频给我| 亚洲永久免费| 欧美肥婆在线| 午夜精品免费| 91久久精品国产91久久| 欧美日韩p片| 欧美在线播放一区| 亚洲人成毛片在线播放女女| 午夜精品久久久久久久久久久久久 | 亚洲尤物在线| 欧美国产乱视频| 亚洲欧美日韩人成在线播放| 伊人婷婷欧美激情| 欧美日韩系列| 国产精品美腿一区在线看| 99视频在线精品国自产拍免费观看 | 亚洲国产精品女人久久久| 亚洲午夜精品久久久久久app| 国产香蕉久久精品综合网| 欧美黄色网络| 久久精品一区二区三区四区| 日韩午夜一区| 亚洲国产欧洲综合997久久| 欧美一级理论性理论a| 亚洲精品视频在线| 黄色成人av网| 国产精品99一区| 欧美激情中文不卡| 久久中文欧美| 欧美在线综合| 亚洲主播在线播放| 中文国产成人精品| 亚洲欧洲在线看| 欧美高清视频| 麻豆精品在线视频|