分享到...
复制网址邮件QQ空间新浪微博MSN腾讯微博人人网开心网百度搜藏谷歌Buzz搜狐微博腾讯朋友淘江湖网易微博豆瓣查看更多(96)
分享到各大网站
复制网址收藏夹邮件谷歌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
Lazy evaluation in Ruby_Ruby_编程开发_程序员俱乐部
最新资讯 | 百度新闻 | GOOGLE地图 | RSS订阅 | 更多
非技术区
生活休闲恋爱交友移动开发
开发工具DB2
MySqlSybase开发
JAVA.NETPHPC/C++数据库
SQL ServerOracle互联网
运营推广营销SEO系统
LinuxUnixWindows资讯
动态产品人物创业
职场学习管理热搜:
- 局域网
- 繁体字转化为简体字
- 脚本
- 预定义变量
- CMS
- 递归
- 产品经理
- 性能监测工具
- Metric_fu静态代码检查工具
- 泛域名
- Rails3路由
- 飞信应答机器人
- class变量
- 实例变量
- class实例变量
- 局域网
- 繁体字转化为简体字
- 脚本
- 预定义变量
- CMS
- 递归
- 产品经理
- 性能监测工具
- Metric_fu静态代码检查工具
- 泛域名
您所在的位置: 程序员俱乐部 > 编程开发 > 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 安装试用手记
- ·Ruby on Rails Tutori
- ·ruby抓取URL内容并解析页面所有UR
- ·ruby各种小脚本(集装箱)
- ·Ubuntu 10.10 下使用RVM安
- ·windows下安装ruby1.9.2和
用户名: 匿名
最新文章
- ·Safe Alert Request E
- ·mysql随机查询的优化 mysql随机
- ·显示html代码的函数
- ·php生成某个范围内的随机时间
- ·php 繁体字转化为简体字
- ·php缓存技术
- ·php实现无限级分类(递归方法)
- ·php 按最大尺寸 等比例缩放图片
- ·Xdebug的安装
- ·Xdebug教程
- ·php5.3 apache2.2安装配置
- ·CakePHP i18n 实现
- ·ZenCart使用之--每页显示商品个数
- ·ZenCart无法显示添加的细节图片
- ·互联网产品经理好书推荐
最新标签
今日热点
- ·rails 设置session过期时间
- ·Conexant Systems HD
- ·rails之路
- ·Kindeditor rails3 插件
- ·在Rails项目中导入excel 导出e
- ·Ruby1.9.2 On Rails3.
- ·Rails 异步发送邮件和测试
- ·MacVim的学习使用经验
- ·assert_select的用法
- ·一个脚本×关键词“百度说吧”你懂的
推荐文章
- ·Conexant Systems HD
- ·jstree使用之二 jstree1.0
- ·MacVim的学习使用经验
- ·使用google map v3添加经纬度
- ·netbeans安装快速调试器出错 ne
- ·Rails3教程系列之一:Rails3入
- ·ubuntu10.10 ruby1.9.
- ·在Rails项目中导入excel 导出e
- ·基于Ubuntu Server 10.0
- ·Windows下安装Ruby on Ra
- ·Kindeditor rails3 插件
- ·Ruby及Ruby On Rails 教
- ·rails 设置session过期时间
- ·rails3 +jquery-ui+ac
- ·Rails3教程系列之四:Rails3入
- Powered by 程序员俱乐部 程序提供: HugoCMS 2.0 LinezingStat
网站备案:浙ICP备08018443号