块:ruby
block_name{ statement1 statement2 .......... }
def test_yield puts "在 test 方法内" yield puts "你又回到了 test 方法内" yield end test_yield{puts "你在块内"} #在 test 方法内 #你在块内 #你又回到了 test 方法内 #你在块内
至关于yield被大括号内的code代替了函数
带有参数的 yield 语句spa
def test_yield_2 yield 10 puts "你又回到了 test 方法内" yield 100 end test_yield_2{|i| puts "你在块#{i}内"} #你在块10内 #你又回到了 test 方法内 #你在块100内
若是您想要传递多个参数,那么 yield 语句以下所示:code
yield a, b test {|a, b| statement}
def test_3 yield end test_3{ puts "Hello world"} #Hello world
可是若是方法的最后一个参数前带有 &,那么您能够向该方法传递一个块,且这个块可被赋给最后一个参数。若是 * 和 & 同时出如今参数列表中,& 应放在后面。class
def test_4(&block) block.call end test_4{ puts "Hello world"} #Hello world
每一个 Ruby 源文件能够声明当文件被加载时要运行的代码块(BEGIN 块),以及程序完成执行后要运行的代码块(END 块)。test
BEGIN{ # BEGIN 代码块 puts "BEGIN 代码块" } END{ #END代码块 puts "END代码块" } #main代码块 puts "MAIN代码块"
一个程序能够包含多个 BEGIN 和 END 块。BEGIN 块按照它们出现的顺序执行。END 块按照它们出现的相反顺序执行。当执行时,上面的程序输出如下结果:yield
BEGIN 代码块 MAIN 代码块 END 代码块