简单的ruby 迭代器

      由于工作关系,一直没有时间学习ruby,最近终于有时间可以学习下ruby了,同时也在csdn开了blog,借此记录一下自己学习的心得,当然不仅仅是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成立的时候。

      书里同时也实现了一个可传递参数的迭代器实现,代码如下(为什么csdn插入代码功能里提供的语言种类没有ruby,郁闷):
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

    说实话,这个实现我也是按照自己的理解修改,感觉这样更适合,自己试了下没什么问题,结果也如我所料,可是感觉这样的写法不太好,只能在慢慢的学习去体会了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值