例1:
blcok被yield调用,yield可以传递给block 参数
例2:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
find , each , collect迭代器:
find迭代器用于查找数组中满足条件的元素,并返回元素值
each迭代器用于连续访问数组值
collect用来收集数组元素,并传递给block
例:
----
inject迭代器:
遍历收集的所有成员以累计出一个值
例:
->16
->105
inject的工作过程:block第一次执行时,sum被置为inject的参数(0),element置为收集的第一个元素。接下来每次执行block时,sum被置为上次block被调用的返回值。inject的最后结果是最后一次调用block的返回值。
如果inject没有参数,那么它使用收集的第一个元素作为初始值,并从第二个元素开始迭代!
例:
->9
->24
def three_times
yield 'tom'
yield 'jim'
yield 'lucy'
end
three_times {|name| puts 'hello '+name }
yield 'tom'
yield 'jim'
yield 'lucy'
end
three_times {|name| puts 'hello '+name }
例2:
def fib_up_to(max)
i1,i2=1,1
while i1<=max
yield i1
i1,i2=i2,i1+i2
end
end
fib_up_to(1000) {|num| print num, " "}#注意这里print输出的时候是num," "
i1,i2=1,1
while i1<=max
yield i1
i1,i2=i2,i1+i2
end
end
fib_up_to(1000) {|num| print num, " "}#注意这里print输出的时候是num," "
find , each , collect迭代器:
find迭代器用于查找数组中满足条件的元素,并返回元素值
each迭代器用于连续访问数组值
collect用来收集数组元素,并传递给block
例:
[1,3,5,7,9].each{|i| puts i}
a=['H','A','L'].collect {|x|x.succ}
puts a
a=['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
f.each do |line|
puts line
end
f.close
遍历收集的所有成员以累计出一个值
例:
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
b=[1,3,5,7].inject(1) {|product, element| product*element}
puts a, b
->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
d=[2,3,4].inject {|product, element| product*element}
puts c, d
->24
本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/64017,如需转载请自行联系原作者