04/27/2010 Block和迭代器Iterators

Block: 一种可以和方法调用相关联的代码块,几乎就像参数一样。

可以使用block实现回调,以及实现迭代器。

 

block只是在花括号或者do…end之间的一组代码。

{ puts “Hello”}              #单行block用花括号

do                                  #多行block用do…end

  club.enroll(person)

  person.socialize

end

 

block与方法的调用相关联:

把block的开始放在含有方法调用的源码行的结尾处实现关联。

greet { puts “Hi” }         #greet是方法,{ puts “Hi” }是block

 

若方法有参数,它们出现在block之前。

verbose_greet(“Dave”,"loyal customer") {puts “Hi” }

 

使用Ruby的yield语句,方法可以一次或多次的调用相关联的block.

def call_block

  puts "test begin"

  yield

  yield

  puts "test over"

end

call_block { puts "In the block?"}

 

使用block来实现迭代器

迭代器是从某种收集(collection)如数组中连续返回元素的方法。

 

animals = %w(ant bee cat dog elk)          #创建一个数组

animals.each {|animal| puts animal}         #迭代它的内容。Array类中的each迭代器。

 

5.times {print "+"}                        #+++++,对象5五次调用block

3.upto(6)  {|i| print i}                    #3456,对象3调用一个block,并传入一个连续的值,直到这个值到达6为止

('a'..'e').each {|char| print char}      #abcde,对a到e的字符区间,使用each方法调用block

posted @ 2010-04-27 23:20  NikeyL  阅读(185)  评论(0编辑  收藏  举报