自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入解讀Ruby Continuations

開發(fā) 開發(fā)工具
Ruby Continuations是Ruby語言中比較難以掌握的一個知識點。我們可以通過它來處理非局部的跳轉(zhuǎn),并且保存更多的信息。

通過對Ruby語言的學(xué)習(xí),我們可以知道,它是一種靈活性較強的腳本語言。但是其中也不乏難以理解的內(nèi)容,比如Ruby Continuations。#t#

Ruby Continuations可以處理非局部的跳轉(zhuǎn),它保存了返回地址和執(zhí)行的環(huán)境,和c中的setjmp和longjump類似,但它保存了更多的信息:

axgle舉的曹操的例子很形象,我們拿過來看看:

曹操(caocao)被譽為“古代輕功***的人 ”,是因為“說曹操,曹操到”這句名言。在ruby中,曹操的這種輕功被稱為callcc.

  1. callcc{|caocao|   
  2. for say in ["曹操","諸葛亮","周瑜"]   
  3. caocao.call if say=="曹操"   
  4. puts say #不會輸出,因為曹操已經(jīng)飛出去了   
  5. end   

 

“曹操”飛到這里來了(跳出了callcc的block,緊跟在這個block后面,繼續(xù)執(zhí)行下面的ruby代碼),puts "到" callcc里的caocao是個"延續(xù)"(Continuation)對象.這個對象只有名叫“call"的這樣一個方法。當(dāng)執(zhí)行了caocao.call后,caocao就會飛到callcc的塊(block)后面,讓ruby繼續(xù)執(zhí)行其下面的代碼。

我上面給出的是一個從塊里頭”飛“到塊外面的例子;下面是Programming Ruby給出的從代碼后面”飛“到代碼前面的例子:

  1. arr = [ "Freddie", "Herbie", 
    "Ron", "Max", "Ringo" ]   
  2. callcc{|$cc|}#下面的$cc.call
    如果被執(zhí)行,就會飛回到這里(callcc的塊之后)。   
  3. puts(message = arr.shift)   
  4. $cc.call unless message =~ /Max/ 

以上就是對Ruby Continuations的詳細(xì)介紹。

責(zé)任編輯:曹凱 來源: jb51.net
相關(guān)推薦

2009-12-14 18:14:27

Ruby DSL

2009-12-14 10:20:12

Ruby自動化測試

2009-12-15 15:35:56

Ruby symbol

2010-09-25 14:39:29

Bruce Tate

2009-12-15 10:10:42

Ruby過程對象

2009-12-14 14:50:46

Ruby傳參數(shù)

2009-12-16 14:33:21

Ruby哈希表

2009-12-14 14:40:10

Ruby全局域變量

2009-12-14 17:04:13

Ruby讀寫UNIX命

2009-12-15 10:48:54

Ruby局部變量

2009-12-16 17:07:27

Ruby on Rai

2009-12-08 16:48:25

PHP類phpExce

2013-04-27 11:22:14

2009-12-11 10:52:37

PHP運行機制

2009-12-10 17:54:57

PHP刪除Cookie

2011-12-22 14:27:11

2012-02-21 09:43:50

2010-11-15 13:00:12

Oracle修改表結(jié)構(gòu)

2013-05-15 10:29:13

微軟云計算“戰(zhàn)略”

2025-02-19 10:49:30

點贊
收藏

51CTO技術(shù)棧公眾號