Ruby代码块的语法是,把Ruby代码放在大括号之间或放在do/end命令之间。如下所示:
| { #这是一个代码块... } do #...并且这也是一个代码块 end |
在一个很简单的实例中,{puts"hello world"}就是一个有效的代码块。那么,你应该如何使用这些代码块并且把它们作为一组代码传递给一个方法呢?为此,首先要定义一个如下形式的简单方法:
| def someMethod yield end |
命令yield把控制传递给代码块(它被传递给这个方法)。下面的代码向你展示,一个代码块是如何被传递到上面这个方法的。
| irb(main):001:0> someMethod {puts "hello world"} hello world |
每当调用yield时,执行传递到该方法的代码块。下面是另一个更复杂些的方法的例子,它使用了一个代码块来做更多的工作。
| irb(main):001:0> def fibonacci (stop) while stop < 20 stop=yield end end => nil irb(main):006:0> i=0; j=1; fibonacci(j) {puts i; temp = i; i = j;j = temp + j} 0 1 1 2 3 5 8 |
