Ruby 迭代器

上一篇 / 下一篇  2008-05-25 12:13:03 / 个人分类:Ruby之旅

      由于工作关系,一直没有时间学习ruby,最近终于有时间可以学习下ruby了,借此空间记录一下自己学习的心得,当然不仅仅 是ruby,近几年动态语言非常的火热,而我个人也非常喜欢动态语言的简洁,可惜一直都没什么时间花在上面,如果可能除了ruby,我也想花花时间在其他 的语言上,例如Groovy,不过暂时还是以ruby为主,其他的有时间再看了。    
 
      对于ruby来说,我完全是个新手,所以目前所写的文章都绝对是基础性的,主要作为一个笔记的作用,所以各位高手可不要BS在下。不过还好,总是有一点点 底子,学起来不至于那么痛苦。昨天搞了本《The Ruby way》来看,本来想买《Programming Ruby》,可是后来看到Way这本书觉得它更适合我,对于一般的语法介绍随便上网看看就可以了,而Way一书主要是从解决各种问题着手,实用性较强,我 们学语言就是为了解决问题嘛,可不是为了显摆,经过艰难的抉择最终选择了Way这本书(最主要是way一书便宜些,呵呵),有的朋友说这些书可以从网络上 获得,为什么还要买?我只能说这是我的习惯,更喜欢实体书,特别是好书自己一定要有一本实体书收藏。(汗一个,只是为了收藏。)

     买了书回来后,迫不及待的翻开看了下,其中第一章有一段粗略的讲了下迭代器的实现,大概看了下,实现非常简单,其代码如下:

def repeat(condition)
  yield
  retry 
if not condition
end

        repeat方法接受一个condition参数,首先运行代码块,然后如果condition为false的时候retry进行重新运行代码块。非常简 单且简洁的实现,这里包含了两个重要的关键字,一个是yield,另外一个就是retry,yield的作用就是执行方法所接受的代码块,这是动态语言中 非常重要的概念,如果对这个概念不了解,那么ruby就很难学下去了,在Groovy里面也有同样的功能,使用Closure闭包实现的。而retry的作用就是重新运行代码块,当然是在not condition成立的时候。

      书里同时也实现了一个可传递参数的迭代器实现,代码如下:
def my_sequence
  
for i in 1..10 do
    
yield i
  end
end

my_sequence {
|x| puts x**3 }

    以上代码实现了一个迭代器生成1~10的整数,然后调用这个迭代器生成前10个整数的立方。方法接受一个带参数的代码块
{|x| puts x**3 },然后进行循环运行该代码块,yield之后的i就是传给代码块的参数。

    对于以上第一个实现,我对其进行了一点点修改,具体如下:
def repeat(condition)
  
if not condition
    
yield
    retry 
  end
end

    说实话,这个实现我也是按照自己的理解修改,感觉这样更适合,自己试了下没什么问题,结果也如我所料,可是感觉这样的写法不太好,只能在慢慢的学习去体会了。

TAG:

引用 删除 Guest   /   2008-11-13 13:33:49
1
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2009-01-08  
    123
45678910
11121314151617
18192021222324
25262728293031

我的存档

数据统计

  • 访问量: 22
  • 日志数: 2
  • 建立时间: 2008-05-25
  • 更新时间: 2008-05-25

RSS订阅

Open Toolbar