代码块( Blocks)是指一块代码,用大括号({})或者do…end来标明起始和结束,代码块只能跟在方法调用后边。
yield语句:在方法内部使用yield语句来占位,当方法执行到yield时,实际执行的是调用方法时跟在后边的的代码块。
|x|:变量用一对’|'包裹,在代码块中使用,用于接受yield传递的参数。yield后跟的参数会传递给代码块中用| |标志的变量。
下面通过例子来更直观的认识block。
def x
    p "=start"
    yield 'a'
    yield 'b'
    p "=end"
end

x do |a|
    p "hello", a
end
 
do |a|
  p "hello", a
end
即使代码块,即block,它跟在x这个函数调用后面;
 
yield 'a'
yield 'b'
在函数定义中,它其实就是替换了
do |a|
  p "hello", a
end
这个代码块,且,'a'/'b'就对应参数|a|。
 
程序的运行结果为:
"=start"
"hello"
"a"
"hello"
"b"
"=end"
定义了函数x,其中两次使用yield调用block中的代码块。block代码块支持一个参数。