Jun'uary

Implement external iterator by callcc

Jan 发表于 2008-02-20 13:19:24

Said ruby 1.9 will add a new useful feature named external iterator - the kind of iterator you used in Java/Cpp. It's interesting to implement one ourself by using callcc, in 1.8.6.

Note: It's easy to turn this piece of code into a module or make the external iterator available for all kinds of collections, try yourself :0

code:

data = %w/file edit search view tools options language buffers help/

class Array
  class Iterator
    attr_accessor :cc, :next_cc
    attr_accessor :value, :next_value
   
    def next?
      @next_value
    end
   
    def next
      @value = @next_value
      callcc do |cc|
        @next_cc = cc
        @cc.call
      end
      @value
    end
   
  end
 
  def iterator
    @iter = Iterator.new
    callcc do |cc|
      @iter.next_cc = cc
      each do |obj|
        callcc do |cc2|
          @iter.cc = cc2
          @iter.next_value = obj
          @iter.next_cc.call
        end
      end
      @iter.next_value = nil
      @iter.next_cc.call
    end
    @iter
  end
end

iter = data.iterator
puts iter.next while iter.next?
关键词(Tag): ruby iterator external 1.8 callcc



收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定

Jan'uary

人类一思考,老夫就发笑

搜索

日历