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

馭風萬里無垠

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精品国产| 亚洲黄一区二区| 欧美日韩18| 欧美亚洲免费高清在线观看| 久久国产精品毛片| 亚洲第一精品在线| 欧美电影在线观看完整版| 日韩视频免费在线| 久久精品视频免费观看| 亚洲一区二区网站| 午夜免费在线观看精品视频| 国内精品久久久久影院优| 久久频这里精品99香蕉| 亚洲第一二三四五区| 夜夜夜久久久| 国产亚洲综合精品| 欧美高清视频一区二区三区在线观看 | 欧美一区二区三区免费观看 | 亚洲国产精品久久| 欧美啪啪成人vr| 久久国产精品亚洲77777| 欧美国产在线电影| 欧美一区激情| 99在线热播精品免费| 国产欧美日韩在线| 欧美日韩一区二区在线视频| 久久综合九色欧美综合狠狠| 亚洲欧美美女| 欧美一区日本一区韩国一区| 一个色综合av| 亚洲欧美在线aaa| 亚洲自拍偷拍福利| 午夜亚洲福利在线老司机| 亚洲欧美国产精品va在线观看 | 国产热re99久久6国产精品| 国产精品网站在线| 在线播放一区| 亚洲欧洲精品一区| 亚洲私人黄色宅男| 日韩午夜在线视频| 欧美成人综合网站| 欧美超级免费视 在线| 亚洲第一搞黄网站| 亚洲激情女人| 久久成人亚洲| 久久久国产成人精品| 欧美国产免费| 国产精品久久久久久久久久免费| 国产精品免费网站| 亚洲精品1234| 欧美一级成年大片在线观看| 久久精品视频在线看| 亚洲精品社区| 日韩午夜免费| 久久综合久久美利坚合众国| 欧美午夜三级| 99国产精品国产精品久久| 久久精品国产77777蜜臀| 亚洲精品美女在线观看| 久久成人综合视频| 国产伦精品一区二区三区视频孕妇| 亚洲国产成人久久综合一区| 久久精品国产99精品国产亚洲性色 | 欧美国产日韩亚洲一区| 国产日韩一区在线| 亚洲伊人久久综合| 亚洲免费av电影| 每日更新成人在线视频| 国产精自产拍久久久久久| 老司机一区二区三区| 国产精品影片在线观看| 亚洲欧美在线观看| 亚洲午夜久久久| 国产精品久久9| 亚洲欧美日韩天堂| 亚洲一卡久久| 国产婷婷97碰碰久久人人蜜臀| 午夜精品久久久久久| 亚洲免费综合| 黄色成人在线免费| 欧美激情1区| 欧美日韩亚洲国产精品| 一区二区三区高清| 亚洲深夜av| 国产三级精品三级| 国产欧美精品一区二区色综合| 亚洲永久网站| 午夜精品久久久久99热蜜桃导演| 国产真实精品久久二三区| 乱人伦精品视频在线观看| 蜜桃av一区二区在线观看| 在线视频精品| 久久国产精品99国产精| 亚洲精品在线电影| 欧美一区久久| 亚洲欧美中文字幕| 女女同性精品视频| 国产一区二区三区奇米久涩 | 精品91在线| 另类酷文…触手系列精品集v1小说| 久久综合国产精品| 香蕉久久国产| 欧美另类一区二区三区| 久久综合色婷婷| 国产精品乱子久久久久| 亚洲欧洲一级| 亚洲国产欧美一区| 欧美在线观看网站| 亚洲一区在线直播| 欧美日韩视频在线一区二区观看视频| 久久久天天操| 国产欧美在线播放| 亚洲一区二区三区在线| 亚洲少妇中出一区| 女人香蕉久久**毛片精品| 久久精品首页| 一区二区视频在线观看| 久久国产天堂福利天堂| 久久久久久久尹人综合网亚洲| 国产精品九色蝌蚪自拍| 亚洲影视综合| 亚洲大胆av| 性欧美在线看片a免费观看| 日韩午夜一区| 国产精品极品美女粉嫩高清在线| 亚洲一区二区av电影| 性做久久久久久免费观看欧美| 国产热re99久久6国产精品| 久久精彩视频| 一区视频在线| 欧美另类在线播放| 亚洲综合视频网| 欧美成人精品激情在线观看 | 欧美在线www| 一区在线观看视频| 欧美日韩精品一区视频| 亚洲一区二区三区视频播放| 欧美成人精品激情在线观看| 一道本一区二区| 黄色小说综合网站| 欧美视频在线视频| 久久免费黄色| 亚洲一区美女视频在线观看免费| 久久久噜噜噜久久狠狠50岁| 日韩一二三在线视频播| 欧美精品免费在线| 性8sex亚洲区入口| 亚洲在线视频一区| 亚洲精品1区2区| 久久av一区| 中日韩美女免费视频网站在线观看| 国产香蕉97碰碰久久人人| 欧美激情中文字幕一区二区| 久久三级福利| 欧美中在线观看| 午夜精品一区二区三区电影天堂| 亚洲免费观看| av成人天堂| 亚洲美女中出| 中文无字幕一区二区三区| 亚洲精品欧美日韩专区| 亚洲高清不卡一区| 久久久亚洲国产美女国产盗摄| 久久久99精品免费观看不卡| 午夜精品一区二区三区在线视 | 欧美岛国激情| 免费观看在线综合| 欧美大片一区二区三区| 欧美久久久久免费| 欧美日韩成人精品| 欧美日韩1080p| 国产精品一区二区三区四区五区 | 欧美高清在线一区| 美女视频网站黄色亚洲| 精品成人在线视频| 一区二区三区亚洲| 99ri日韩精品视频| 久久久久久色| 亚洲免费激情| 久久精品国产亚洲一区二区三区| 麻豆成人av| 国产精品毛片a∨一区二区三区|国 | 国内精品国产成人| 亚洲精品乱码久久久久| 香蕉久久夜色精品国产| 久久综合九色九九| 亚洲在线观看免费视频| 欧美国产91| 尤物精品国产第一福利三区|