最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ruby中使用連續(xù)體Continuation實現(xiàn)生成器

 更新時間:2015年01月06日 11:14:15   投稿:junjie  
這篇文章主要介紹了Ruby中使用連續(xù)體Continuation實現(xiàn)生成器,本文先是介紹了生成器的概念,然后給出實現(xiàn)代碼,需要的朋友可以參考下

ruby中有很多經(jīng)典的驅(qū)動器結(jié)構(gòu),比如枚舉器和生成器等.這次簡單介紹下生成器的概念.生成器是按照功能要求,一次產(chǎn)生一個對象,或稱之為生成一個對象的方法.ruby中的連續(xù)體正好可以用來完成生成器的功能.連續(xù)體說起來晦澀,其實還是很簡單的,它有3個特點:

1. callcc方法會給代碼塊傳一個連續(xù)體對象,你可以保存該對象;
2. 當(dāng)調(diào)用連續(xù)體的call方法時指令流會跳轉(zhuǎn)到callcc方法之后;
3. 如果給連續(xù)體的call方法傳遞對象,則callcc方法會返回該對象,如果不傳遞對象,callcc會返回nil.

我們下面參考一段實例代碼,我加了注釋.該代碼用來生成Fibonacci數(shù)列和一個遞增數(shù)列.兩個類FibG和IncG都繼承于"抽象類"G,G實現(xiàn)生成器的"抽象"事件驅(qū)動邏輯,而具體類FibG和IncG用來完成實際生成邏輯,全在代碼里啦:

復(fù)制代碼 代碼如下:

#!/usr/bin/ruby

require 'continuation'

#一個生成器"抽象"類
class G
 def initialize
  do_g
 end
 
 #@main_context實際是next的"出口",讓next返回@main_context.call(v)的值,即生成的數(shù)
 def next
  callcc do |c|
   @main_context = c
   @g_context.call
  end
 end
private
 def do_g
  callcc do |c|
   @g_context = c
   return
  end
  g_loop #虛方法,由實際具體類實現(xiàn),但由G來調(diào)用!
 end

 #@g_context實際為G的內(nèi)在驅(qū)動器,其會反復(fù)回到g_loop中不斷生成新的數(shù)
 def g(v)
  callcc do |c|
   @g_context = c
   @main_context.call(v)
  end
 end
end

#具體的生成器類,用來生成Fibonacci數(shù)列
class FibG < G
private
 #具體類實現(xiàn)g_loop,實際要怎么生成必須由具體類說了算
 #g_loop不能直接由FibG的實例對象調(diào)用,而要通過G來驅(qū)動
 def g_loop
  g(1)
  a,b=1,1
  loop do
   g(b)
   a,b=b,a+b  
  end
 end
end

class IncG < G
 def initialize(inc_val=10)
  super()
  @inc_val = inc_val
 end
<span style="font-size:18px;"></span><pre name="code" class="ruby">private 
 def g_loop
  x=0
  loop do
   g(x+@inc_val)
   x+=@inc_val
  end
 end
end


f = FibG.new
100.times {printf "%d " % f.next}
puts

i = IncG.new
100.times {printf "%d " % i.next}
puts

i = IncG.new(11)
100.times {printf "%d " % i.next}

相關(guān)文章

最新評論

福州市| 陆河县| 陕西省| 承德市| 准格尔旗| 五常市| 池州市| 宁远县| 烟台市| 万盛区| 独山县| 林周县| 西乡县| 时尚| 温泉县| 冀州市| 邻水| 南陵县| 海林市| 固安县| 什邡市| 安徽省| 通渭县| 常德市| 文水县| 湘阴县| 海淀区| 贺兰县| 忻城县| 庄河市| 祁阳县| 永靖县| 沐川县| 五寨县| 东乡县| 廊坊市| 上杭县| 青海省| 沙洋县| 察隅县| 普兰店市|