ruby杂

分享到...

复制网址邮件QQ空间新浪微博MSN腾讯微博人人网开心网百度搜藏谷歌Buzz搜狐微博腾讯朋友淘江湖网易微博豆瓣查看更多(96)

这是什么工具?

JiaThis

分享到各大网站

复制网址收藏夹邮件谷歌BuzzQQ空间百度搜藏新浪微博搜狐微博网易微博腾讯微博人人网开心网搜狐白社会淘江湖百度空间腾讯朋友天涯社区凤凰微博饭否手机优士网GMAIL邮箱Hotmail邮箱Yahoo! mail飞信51社区谷歌有道书签QQ收藏MSN新浪vivi微软live雅虎收藏115收藏和讯天极139说客百度贴吧好诶嘀咕网豆瓣抓虾鲜果做啥人间网Follow5和讯微博梦幻人生deliciousdiggfacebooktwittermyspacePOCO网若邻网中金微博乐收奇客发现同学网挖客网收客网创业邦就喜欢114啦救救地球抽屉网递客网豆瓣9点黑米书签宝盒网易集网PDF在线转换友好打印英文翻译谷歌阅读器w3c验证Bit.lyDIIGO.comEverNoteFriendFeedLinkedInMIXXNetLogNetvibes.comPhonefavsping.fmPlaxo.comPollAdiumRedditMister-WongStumbleuponPlurk.comFunp.comAsk.commysharefwisp

这是什么工具?

JiaThis

Lazy evaluation in Ruby_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图

最新资讯 | 百度新闻 | GOOGLE地图 | RSS订阅 | 更多

非技术区

生活休闲恋爱交友

职业发展求职面试程序人生

移动开发

开发工具

DB2

MySqlSybase

开发

JAVA.NETPHPC/C++

数据库

SQL ServerOracle

互联网

运营推广营销SEO

系统

LinuxUnixWindows

资讯

动态产品人物

创业

职场学习管理

热搜:

更多>>

您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Lazy evaluation in Ruby

Lazy evaluation in Ruby

2011-1-2 10:31:01  fuliang  http://fuliang.javaeye.com  我要评论(0)

  • 摘要:1.使用||延迟初始化 deffib(n)@result||=[]returnnif(0..1).include?n@result[n]||=fib(n- 1)+fib(n-1)end2.使用无穷大InifinityRuby可以使用无穷大:irb(main):001:0>Inf=1/0.0=& gt;Infinityirb(main):002:0>(-Inf..Inf).include?(10)=>true使用 Inifinity可以构造无穷大小的LazyList:lazyList=
  • 标签:Ruby

1.使用||延迟初始化

def fib(n)
     @result ||= []
     return n if (0..1).include? n
     @result[n] ||= fib(n-1) + fib(n-1)
end

2.使用无穷大Inifinity
Ruby可以使用无穷大:
irb(main):001:0> Inf = 1 / 0.0
=> Infinity
irb(main):002:0> (-Inf..Inf).include?(10)
=> true

使用Inifinity可以构造无穷大小的Lazy List:
lazyList = (0..1/0.0)
lazyList.take(100).select{|i| i % 2 == 0}
 lazyList.take(100).select{rand > 0.9}

3.使用Enumerator:
fib = Enumerator.new { |y|
    a = b = 1
    loop {
      y << a
      a, b = b, a + b
    }
 }
fib.take(10) #=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

natural_numbers = Enumerator.new do |yielder|
  number = 1
  loop do
    yielder.yield number
    number += 1
  end
end

#lazy select
class Enumerator
  def lazy_select(&block)
    Enumerator.new do |yielder|
      self.each do |val|
      yielder.yield(val) if block.call(val)
      end
    end
  end
end
p natural_numbers
    .lazy_select {|n| n % 47 == 0}
    .lazy_select {|n| palindrome_number?(n)}
    .first(5)

4.使用Fiber:
fib = Fiber.new do
   f1 = f2 = 1
   loop do
       Fiber.yield f1
       f1, f2 = f2, f1 + f2
    end
end

10.times { puts fib.resume }

参考:
Lazy Enumerators in Ruby

上一篇: Ruby Proc curry化 下一篇: (转)项目管理工具 Redmine 安装试用手记

Lazy evaluation in Ruby

Ruby Proc curry化

One line Ruby code

ruby 时间处理

Ruby复合函数

发表评论

用户名: 匿名

最新文章

(转)项目管理工具 Redmine 安装试用手记

(转)项目管理..

RVM中文使用指南

RVM中文使用..

最新标签

  • 局域网
  • 繁体字转化为简体字
  • 脚本
  • 预定义变量
  • CMS
  • 递归
  • 产品经理
  • 性能监测工具
  • Metric_fu静态代码检查工具
  • 泛域名

    今日热点

    推荐文章

    netbeans安装快速调试器出错 netbeans ruby debug ide

    netbean..

    Rails3路由简析

    Rails3路..

  • 原文地址:https://www.cnblogs.com/lexus/p/1935198.html