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

馭風(fēng)萬里無垠

ruby學(xué)習(xí)筆記《二》

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

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種結(jié)構(gòu)

  • block方式3種
  • 隱式傳入,內(nèi)部用yield調(diào)用
  
def thrice
  
yield
  
yield
  
yield
end

x
=1
thrice {x
+=2}
  • &block參數(shù)傳入,內(nèi)部直接操作&block
def six_times(&block)
  thrice(
&block)
  thrice(
&block)
end
 
= 4
six_times { x 
+= 10 }
  • &block傳入,保存block為變量,然后調(diào)用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對(duì)象的一個(gè)成員,后邊實(shí)現(xiàn)延遲調(diào)用。
  • 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)

  • 特點(diǎn)和差異

    • return行為

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


  • arity - 參數(shù)個(gè)數(shù)校驗(yàn)

對(duì)于調(diào)用點(diǎn)的參數(shù)檢查,呈現(xiàn)如下行為:
  • lambda/method嚴(yán)格校驗(yàn)參數(shù)的個(gè)數(shù),如果不匹配回拋出異常
  • 其它幾個(gè)不檢查參數(shù)個(gè)數(shù)


  • 總結(jié)

lambda/method方式呈現(xiàn)完備的closure行為,return之后繼續(xù)下一流程,對(duì)于實(shí)際傳入?yún)?shù)個(gè)數(shù)會(huì)在調(diào)用點(diǎn)檢查;proc/blocks方式在return的時(shí)候直接返回了外部的函數(shù)或者block,對(duì)于傳入的參數(shù)個(gè)數(shù)也沒有執(zhí)行檢查。

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

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

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

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美超级免费视 在线| 欧美日韩直播| 亚洲美女av在线播放| 日韩视频在线你懂得| 欧美日韩国产美女| 免费久久99精品国产自在现线| 亚洲人成网站在线播| 欧美啪啪成人vr| 欧美一级成年大片在线观看| 亚洲黄色影片| 亚洲国产综合在线| 一区二区高清视频在线观看| 一区二区三区黄色| 午夜在线一区| 免费一区二区三区| 国产精品h在线观看| 韩国三级电影久久久久久| 亚洲精品美女久久7777777| 一区二区精品| 久久午夜电影网| 亚洲裸体俱乐部裸体舞表演av| 亚洲一区二区三区在线看| 欧美一区影院| 欧美日韩和欧美的一区二区| 国产欧美日韩综合精品二区| 亚洲国产精品999| 亚洲欧美日韩国产精品| 乱中年女人伦av一区二区| 亚洲精品自在在线观看| 欧美在线91| 欧美视频1区| 亚洲国产精品精华液2区45 | 久久免费精品日本久久中文字幕| 裸体女人亚洲精品一区| 国产精品va在线播放| 国产综合色精品一区二区三区| 亚洲精品资源| 久久天天躁狠狠躁夜夜av| 亚洲免费黄色| 欧美阿v一级看视频| 国产在线视频不卡二| 一区二区三区精密机械公司 | 久久久综合免费视频| 国产精品毛片大码女人| 亚洲精品欧美日韩| 久久先锋资源| 香蕉av777xxx色综合一区| 欧美乱妇高清无乱码| 在线日韩av永久免费观看| 欧美一区二区三区四区在线观看| 亚洲欧洲另类| 欧美交受高潮1| 亚洲成人中文| 久久综合久久美利坚合众国| 在线亚洲一区| 欧美午夜无遮挡| 亚洲视频1区2区| 亚洲肉体裸体xxxx137| 久久亚洲捆绑美女| 伊人久久男人天堂| 久久躁日日躁aaaaxxxx| 久久成人国产精品| 亚洲一区在线播放| 国产精品高潮粉嫩av| 正在播放欧美一区| 日韩一级不卡| 国产精品多人| 欧美一区二区三区啪啪| 午夜在线a亚洲v天堂网2018| 国产麻豆成人精品| 欧美中文字幕精品| 欧美在线日韩| 在线观看欧美日韩国产| 免费看的黄色欧美网站| 美国成人毛片| 亚洲免费电影在线| 99日韩精品| 国产精品亚洲а∨天堂免在线| 亚洲在线黄色| 性8sex亚洲区入口| 黄色av一区| 欧美国产极速在线| 欧美精品一区二区三区在线看午夜| 亚洲精选中文字幕| 日韩视频在线观看免费| 国产精品视频免费一区| 久久一区二区三区国产精品| 久热国产精品视频| 一区二区三区日韩精品| 亚洲在线视频| 亚洲国产专区校园欧美| 亚洲毛片一区| 国产一区二区三区四区在线观看| 蜜桃久久精品乱码一区二区| 欧美高清在线精品一区| 午夜在线视频观看日韩17c| 久久精品国产清自在天天线| 亚洲精品美女在线观看| 亚洲综合色视频| 亚洲第一精品在线| 亚洲天堂av在线免费观看| 激情文学综合丁香| 一区二区高清视频| 亚洲黄一区二区三区| 亚洲图片欧洲图片av| 亚洲激情欧美| 亚久久调教视频| 一区二区三区精品久久久| 久久九九国产| 欧美亚洲一区在线| 欧美日韩成人综合天天影院| 久久久成人精品| 欧美体内she精视频在线观看| 蜜桃av一区二区| 国产毛片精品国产一区二区三区| 91久久精品久久国产性色也91 | 麻豆成人精品| 国产欧美日韩综合精品二区| 欧美激情日韩| 国内久久视频| 亚洲性夜色噜噜噜7777| 日韩网站在线观看| 久久精品亚洲一区二区| 日韩亚洲国产欧美| 一区二区欧美视频| 久久综合色一综合色88| 国产精品国产亚洲精品看不卡15 | 一个色综合导航| 亚洲精品乱码久久久久久久久| 欧美一级成年大片在线观看| 一区二区三区欧美激情| 免费久久99精品国产自在现线| 久久久九九九九| 国产欧美在线看| 国产精品99久久久久久久久 | 久久婷婷国产综合国色天香| 欧美视频在线一区| 亚洲精品乱码久久久久久日本蜜臀| 国产一区二区三区丝袜 | 亚洲综合视频1区| 亚洲一区精品视频| 欧美特黄一级大片| 亚洲少妇自拍| 午夜精品国产更新| 国产精品久久久久国产a级| 99re这里只有精品6| 一区二区av在线| 欧美日韩免费一区二区三区视频| 亚洲区一区二区三区| 一区二区三区视频在线| 欧美视频在线免费| 亚洲综合成人婷婷小说| 久久精品夜夜夜夜久久| 一区二区三区在线看| 美女尤物久久精品| 亚洲毛片在线免费观看| 亚洲图片欧美一区| 国产视频丨精品|在线观看| 久久狠狠一本精品综合网| 免费久久99精品国产自在现线| 亚洲区一区二| 国产精品一区二区三区观看| 久久婷婷av| 一本色道久久88精品综合| 久久精品一区二区三区中文字幕 | 亚洲黄页一区| 国产精品高潮在线| 久久久久久电影| 亚洲精品一区二区三区四区高清 | 99精品视频免费在线观看| 欧美一区2区三区4区公司二百| 激情综合色丁香一区二区| 欧美日本高清视频| 亚洲欧美激情在线视频| 亚洲第一精品久久忘忧草社区| 亚洲一区尤物| 亚洲国产另类久久久精品极度| 国产精品美女久久久久久久| 久久青青草综合| 亚洲影视中文字幕| 亚洲高清av| 久久青草欧美一区二区三区| 亚洲一区久久久| 亚洲欧洲午夜| 亚洲毛片网站| 亚洲黄色天堂| 亚洲每日更新| 国产午夜久久久久| 欧美精品久久久久久久久久| 久久国产日韩| 亚洲字幕在线观看| 一本久久综合| 欧美福利在线| 亚洲午夜精品网| 在线日韩视频| 黑人一区二区| 欧美体内she精视频| 欧美精品久久久久久久免费观看| 亚洲欧美日韩视频二区| 一本色道久久|