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

馭風萬里無垠

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>
            亚洲人成在线观看| 国产精品久久午夜夜伦鲁鲁| 亚洲欧美日韩国产一区二区三区| 国模 一区 二区 三区| 国产精品草莓在线免费观看| 免费成人小视频| 久久精品伊人| 美女免费视频一区| 欧美激情综合| 国产精品青草综合久久久久99 | 亚洲精品国产品国语在线app| 久久久久国产精品一区二区| 午夜视频在线观看一区| 久久米奇亚洲| 亚洲级视频在线观看免费1级| 亚洲乱码国产乱码精品精天堂 | 国产精品爱啪在线线免费观看| 国产精品每日更新| 在线日本成人| 亚洲欧美中文另类| 亚洲第一色中文字幕| 亚洲视频播放| 欧美另类69精品久久久久9999| 国产日韩一级二级三级| 夜夜嗨av一区二区三区中文字幕| 欧美亚洲一区| 一区二区动漫| 欧美日韩一区二区视频在线| 91久久久一线二线三线品牌| 亚洲综合三区| 欧美视频在线免费看| 日韩视频免费看| 91久久精品www人人做人人爽 | 久久精品国产清高在天天线| 欧美日韩在线播放三区| 99在线热播精品免费| 欧美大成色www永久网站婷| 欧美一区二区三区视频免费播放| 国产精品观看| 先锋亚洲精品| 欧美一区二区三区成人| 国产日韩精品视频一区二区三区 | 欧美承认网站| 日韩视频在线一区| 亚洲精品永久免费精品| 欧美午夜精品理论片a级大开眼界| 亚洲免费高清| 中文日韩在线视频| 国产一区日韩一区| 欧美电影美腿模特1979在线看 | 亚洲国产成人精品久久| 欧美精品日韩| 久久电影一区| 欧美激情国产日韩| 久久国产精品一区二区三区| 久久久久久亚洲精品杨幂换脸 | 国内揄拍国内精品久久| 在线日韩中文字幕| 日韩一级在线| 亚洲国产婷婷| 欧美一区中文字幕| 一区二区三区高清在线观看| 性感少妇一区| 亚洲欧美久久久| 欧美极品一区| 欧美激情一区二区三区在线| 国产一区二区三区在线播放免费观看| 亚洲国产精品一区二区www在线| 国产精品一级在线| 亚洲视频二区| 亚洲一区二区三区四区中文| 欧美成人中文| 亚洲激情第一区| 亚洲精品1区2区| 麻豆av一区二区三区| 久色婷婷小香蕉久久| 在线看成人片| 欧美激情视频一区二区三区在线播放 | 国产精品普通话对白| 91久久夜色精品国产网站| 亚洲激情黄色| 蜜臀久久久99精品久久久久久| 久久一区二区三区四区五区| 国产一区二区日韩精品欧美精品| 亚洲字幕一区二区| 久久久久9999亚洲精品| 韩日欧美一区| 欧美日韩国产成人在线免费| aa日韩免费精品视频一| 欧美日韩国产片| 亚洲永久网站| 亚洲第一色在线| 久久都是精品| 99视频在线精品国自产拍免费观看| 欧美视频一区二区在线观看| 性做久久久久久久免费看| 欧美成熟视频| 久久国产精品久久国产精品| 亚洲破处大片| 韩国成人福利片在线播放| 欧美日韩精品免费在线观看视频| 欧美一区二区视频在线观看| 亚洲欧洲精品一区二区三区波多野1战4 | 久久国产88| 99视频有精品| 亚洲精品欧美精品| 欧美成人精品不卡视频在线观看| 一本色道88久久加勒比精品 | 久久久水蜜桃| 亚洲欧美亚洲| 久久精品国内一区二区三区| 午夜精品理论片| 欧美中文字幕久久| 美脚丝袜一区二区三区在线观看| 99riav久久精品riav| 亚洲午夜国产一区99re久久 | 久久亚洲精品伦理| 欧美成年网站| 亚洲欧洲综合| 中文网丁香综合网| 久久久久久9| 久久午夜视频| 免费在线观看精品| 亚洲人成在线影院| 亚洲影院高清在线| 免费亚洲一区| 国产日韩欧美自拍| 亚洲美女在线观看| 久久精品国产亚洲5555| 欧美激情一级片一区二区| 99国产精品久久久久久久成人热| 亚洲一区精品视频| 免费在线日韩av| 国产日韩成人精品| 一本一本久久a久久精品综合麻豆| 午夜欧美不卡精品aaaaa| 蜜臀av性久久久久蜜臀aⅴ| 亚洲视频香蕉人妖| 欧美精品久久一区| 亚洲电影观看| 久久精品综合网| 亚洲午夜高清视频| 国产精品亚洲综合久久| av成人免费| 一本久道久久久| 欧美日韩国产成人精品| 亚洲国产91精品在线观看| 久久九九精品| 久久久视频精品| 亚洲国产婷婷香蕉久久久久久| 久久久久99| 久久男人资源视频| 亚洲精品久久久久久一区二区| 老司机精品久久| 免费观看在线综合| 亚洲精品中文字幕在线| 日韩午夜精品视频| 国产精品一区二区在线观看网站| 亚洲欧美日韩国产一区二区三区| 亚洲伊人久久综合| 极品尤物久久久av免费看| 男女精品视频| 国产精品久久久久久久久搜平片 | 午夜精品一区二区三区在线视| 欧美日韩妖精视频| 久久伊人亚洲| 欧美激情片在线观看| 欧美诱惑福利视频| 欧美 日韩 国产精品免费观看| 一区二区日韩免费看| 久久精品99| 西西人体一区二区| 欧美福利电影网| 久久精品一本| 国产精品综合网站| 亚洲精品影视在线观看| 国产一区二区三区自拍| 日韩一级黄色片| 国产一区视频在线看| 亚洲影音先锋| 亚洲欧美日韩一区在线观看| 欧美剧在线观看| 亚洲激情第一页| 9国产精品视频| 男人插女人欧美| 欧美成人免费在线视频| 在线观看视频一区二区| 欧美在线综合| 欧美xart系列高清| **网站欧美大片在线观看| 久久久久国产精品人| 麻豆9191精品国产| 亚洲国产91精品在线观看| 久久精品视频在线播放| 久久久久久黄| 亚洲欧洲精品成人久久奇米网 | 免费人成网站在线观看欧美高清| 亚洲欧美自拍偷拍| 久久久精品日韩欧美| 久久全球大尺度高清视频|