ruby块 block

2018-01-05 10:29:17来源:oschina作者:walking_yxf人点击

分享

块:

块由大量的代码组成。
您需要给块取个名称。
块中的代码总是包含在大括号 {} 内。
块总是从与其具有相同名称的函数调用。这意味着如果您的块名称为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 语句


def test_yield_2
yield 10
puts "你又回到了 test 方法内"
yield 100
end
test_yield_2{|i| puts "你在块#{i}内"}
#你在块10内
#你又回到了 test 方法内
#你在块100内

如果您想要传递多个参数,那么yield语句如下所示:


yield a, b
test {|a, b| statement}
块和方法
def test_3
yield
end
test_3{ puts "Hello world"}
#Hello world

但是如果方法的最后一个参数前带有 &,那么您可以向该方法传递一个块,且这个块可被赋给最后一个参数。如果 * 和 & 同时出现在参数列表中,& 应放在后面。


def test_4(&block)
block.call
end
test_4{ puts "Hello world"}
#Hello world
BEGIN 和 END 块

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


BEGIN{
# BEGIN 代码块
puts "BEGIN 代码块"
}
END{
#END代码块
puts "END代码块"
}
#main代码块
puts "MAIN代码块"

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


BEGIN 代码块
MAIN 代码块
END 代码块

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台