ruby中的block是比较难理解的一个概念,但是如果你懂得了什么是回调函数。那么其实block的作用和回调函数是一样的。
我们先看一个没带参数的例子:
def say
   yield 
   yield
end
我们先看单行的block。
say{puts("hello world")}
输出的结果为:
hello world
hello world

block就象是一个没有名称的函数,执行到yield就调用block中的代码执行。

如果block是多行的,那么就应该是这样:
say do 
   puts("hello world")
   puts("ni hao");
end

输出结果:
hello world
ni hao
hello world
ni hao
每一个yield就是执行完block中所有的代码。


接下去我们看看带有参数的block。
def add
   puts(yield(1,2))
   puts(yield(5,6))
end
add{|a,b| a+b}
输出的结果:
3
11

block中的a,b就是这个block的参数,yield(1,3)就是调用这个block,并把1,3赋给a和b。