ruby块 block

块:ruby

  • 块由大量的代码组成。
  • 您须要给块取个名称。
  • 块中的代码老是包含在大括号 {} 内。
  • 块老是从与其具备相同名称的函数调用。这意味着若是您的块名称为 test,那么您要使用函数 test 来调用这个块。
  • 您能够使用 yield 语句来调用块。
block_name{
   statement1
   statement2
   ..........
}

yield 语句

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

BEGIN 和 END 块

每一个 Ruby 源文件能够声明当文件被加载时要运行的代码块(BEGIN 块),以及程序完成执行后要运行的代码块(END 块)。test

BEGIN{
    # BEGIN 代码块
    puts "BEGIN 代码块"
    }

END{
    #END代码块
    puts "END代码块"
    }

#main代码块
puts "MAIN代码块"

一个程序能够包含多个 BEGIN 和 END 块。BEGIN 块按照它们出现的顺序执行。END 块按照它们出现的相反顺序执行。当执行时,上面的程序输出如下结果:yield

BEGIN 代码块
MAIN 代码块
END 代码块
相关文章
相关标签/搜索