blcoks和迭代器

例1:
def three_times
  yield 'tom'
  yield 'jim'
  yield 'lucy'
end
three_times {|name| puts 'hello '+name }
blcok被yield调用,yield可以传递给block 参数
例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," "
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987  

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
----
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

你可能感兴趣的:(职场,迭代器,Ruby,休闲,blcok)