这一节,我们来看看RUBY中比较有意思,同样也很强大的一项功能:块和迭代器。

所谓块,顾名思义就是代码块,多行代码放在一起就成了块而已。而且它的形式也确实能体现出这一特点来。块就是用{}或者用do..end括起来的多行代码。

               { puts "Hello" } #这是一个块
                do ###
                club.enroll(person) # 这同样也是一个块
                person.socialize #
                end ###

当然了,单独地把几行代码这样括起来并没有太大的意义。块的真正的作用是当你创建了一个块之后,你就可以将它与函数联系在一起。你可以在调节器用函数的那一行代码之后加入一个块。这样就可以使用yield语句来多次调节器用这个块。我们还是来看一个例子吧。

class Hello
    def sayHello(name)
      yield
      puts "Hello #{name}"
      yield
    end
end

myHello = Hello.new()
myHello. sayHello("hinus"){ puts "in the block" } #如果函数有参数的话,应该放在函数名之后,在块之前。

你不可以向代码块传入参数。而在块里,应该用(|)符号将形式参数括起来,用来接受实际参数。还是来看一个例子吧。

这样子就很清楚了吧。接下来我们就来看看块的另外一个作用,作为迭代器方法的实现。所谓迭代器不过是一个返回一个集合中连续的元素的方法而已。例如数组:
animals = %w( ant bee cat dog elk ) # create an array
animals.each {|animal| puts animal } # iterate over the contents
再来看几个迭代器的实现:
[ 'cat', 'dog', 'horse' ].each {|name| print name, " " }
5.times { print "*" }
3.upto(6) {|i| print i }
('a'..'e').each {|char| print char }

produces:
cat dog horse *****3456abcde
可见迭代器只有在块的帮助之下才能起到作用,否则它基本就没有什么功能可言。