六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 41|回复: 0

娃娃鸭学Ruby-35、编写自定义的迭代器

[复制链接]

升级  57%

115

主题

115

主题

115

主题

举人

Rank: 3Rank: 3

积分
371
 楼主| 发表于 2013-1-26 14:14:54 | 显示全部楼层 |阅读模式
自定义的迭代器

可调用一个与方法调用相关联的代码块

def twice
  yield
  yield
end

def sequence(n,m,c)
  i=0
while(i<n)
    yield m*i +c
    i+=1
end
end

sequence(3,5,1){|y| puts y}
irb(main):008:0> sequence(3,5,1){|y| puts y}
1
6
11
=> nil

更复杂代码,
  迭代器内部使用另一迭代器
def circle(r,n)
  n.times do |i|
  angle=Math::PI * 2*i /n
  yield r*Math.cos(angle),r*Math.sin(angle)
end
end

def sequence(n,m,c)
  i,s=0,[]
while(i<n)
y=m*i+c
yield y if block_given?
s<<y
i+=1
end
s
end

2011-4-19 14:59 danny
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表