blcoks和迭代器

例1:
InBlock.gifdef three_times
InBlock.gif  yield 'tom'
InBlock.gif  yield 'jim'
InBlock.gif  yield 'lucy'
InBlock.gifend
InBlock.gifthree_times {|name| puts 'hello '+name }
blcok被yield调用,yield可以传递给block 参数
例2:
InBlock.gifdef fib_up_to(max)
InBlock.gif  i1,i2=1,1
InBlock.gif   while i1<=max
InBlock.gif    yield i1
InBlock.gif    i1,i2=i2,i1+i2
InBlock.gif  end
InBlock.gifend
InBlock.gif
fib_up_to(1000) {|num| print num,  " "}#注意这里print输出的时候是num," "
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987  

find , each , collect迭代器:
find迭代器用于查找数组中满足条件的元素,并返回元素值
each迭代器用于连续访问数组值
collect用来收集数组元素,并传递给block
例:
InBlock.gif[1,3,5,7,9].each{|i| puts i}
InBlock.gifa=['H','A','L'].collect {|x|x.succ}
  puts a
----
f= File.open( "/home/elite/NetBeansProjects/song/testfile")
f.each  do |line|
  puts line
end
f.close
inject迭代器:
遍历收集的所有成员以累计出一个值
例:
a=[1,3,5,7].inject(0) {|sum, element| sum+element}
b=[1,3,5,7].inject(1) {|product, element| product*element}
puts a, b
->16
->105
inject的工作过程:block第一次执行时,sum被置为inject的参数(0),element置为收集的第一个元素。接下来每次执行block时,sum被置为上次block被调用的返回值。inject的最后结果是最后一次调用block的返回值。
如果inject没有参数,那么它使用收集的第一个元素作为初始值,并从第二个元素开始迭代!
例:
c=[2,3,4].inject{|sum,element| sum+element}
d=[2,3,4].inject {|product, element| product*element}
puts c, d
->9
->24




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/64017,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值