打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ruby系列教材(23):Blocks and Iterators

在前面说过的SongList例子中,我们没有谈到with_title这个method的实现,这里要做一下描述:

 

很直观的一种做法就是,盲目搜索,对所有情况进行匹配:

class SongList

  def with_title(title)

    for i in 0...@songs.length                   #0开始,直到小于@songs.length,范围是[0,@songs.length)

      return @songs[i] if title == @songs[i].name

    end

    return nil

  end

end

 

*在for中,用...(3点),求数组长度用length,判断字符串是不是相等用==,这里和java里面不同的是,==不是用来判断2个class id是不是相当,for循环使用end结束

 

我们可以很明显的感觉到上面的with_title使用的明显不是ruby的方式,不够简洁,ruby设计者已经考虑到了,array和iterator间的关系密切,所以为array设置了一个find这样的iterator(以前还介绍过Fixnum class里面的times iterator),下面是更加好的实现方式:

class SongList

  def with_title(title)

    @songs.find{|song| song.name == title}

  end

end

 

find这个iterator,return element,如果没有要查找的element,就return nil,yield带有一个parameter,表示array里面的elements。

不要从语法上学习ruby,这个是很重要的,因为ruby设计者希望ruby能够更加自然,更加接近人,所以,这里理解find,是这样:

find{|element| condition}   #element会从0到最后一个element,condition包含了判断这个element是否合理,假如conditon成立,返回element,否则继续,直到element被遍历完成,返回nil

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
ruby Test:unit 常用断言
Overview of the Prototype Javascript Library
AXIS2中OMElement和Java对象之间的转换 分享
TensorFlow全新的数据读取方式:Dataset API入门教程
快速读懂Ruby代码问答
dom4j解析xml字符串实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服