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