Ruby

您现已知道 Ruby 怎么界说办法以及您怎么调用办法。类似地,Ruby 有一个块的概念。

  • 块由很多的代码组成。
  • 您需要给块取个称号。
  • 块中的代码总是包括在大括号 {} 内。
  • 块总是从与其具有相同称号的函数调用。这意味着假如您的块称号为 test,那么您要运用函数 test 来调用这个块。
  • 您能够运用 yield 句子来调用块。

语法

block_name{
   statement1
   statement2
   ..........
}

在这里,您将学到怎么运用一个简略的 yield 句子来调用块。您也将学到怎么运用带有参数的 yield 句子来调用块。在实例中,您将看到这两种类型的 yield 句子。

yield 句子

让咱们看一个 yield 句子的实例:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test
   puts "在 test 办法内"
   yield
   puts "你又回到了 test 办法内"
   yield
end
test {puts "你在块内"}

以上实例运转成果为:

在 test 办法内
你在块内
你又回到了 test 办法内
你在块内

您也能够传递带有参数的 yield 句子。下面是一个实例:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test
   yield 5
   puts "在 test 办法内"
   yield 100
end
test {|i| puts "你在块 #{i} 内"}

以上实例运转成果为:

你在块 5 内
在 test 办法内
你在块 100 内

在这里,yield 句子后跟着参数。您乃至能够传递多个参数。在块中,您能够在两个竖线之间放置一个变量来承受参数。因而,在上面的代码中,yield 5 句子向 test 块传递值 5 作为参数。

现在,看下面的句子:

test {|i| puts "你在块 #{i} 内"}

在这里,值 5 会在变量 i 中收到。现在,调查下面的 puts 句子:

puts "你在块 #{i} 内"

这个 puts 句子的输出是:

你在块 5 内

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

yield a, b

此刻,块如下所示:

test {|a, b| statement}

参数运用逗号分隔。

块和办法

您现已看到块和办法之间是怎么彼此相关的。您一般运用 yield 句子从与其具有相同称号的办法调用块。因而,代码如下所示:

#!/usr/bin/ruby

def test
  yield
end
test{ puts "Hello world"}

本实例是完结块的最简略的办法。您运用 yield 句子调用 test 块。

可是假如办法的最终一个参数前带有 &,那么您能够向该办法传递一个块,且这个块可被赋给最终一个参数。假如 * 和 & 一起呈现在参数列表中,& 应放在后边。

#!/usr/bin/ruby

def test(&block)
   block.call
end
test { puts "Hello World!"}

以上实例运转成果为:

Hello World!

BEGIN 和 END 块

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

#!/usr/bin/ruby

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

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

一个程序能够包括多个 BEGIN 和 END 块。BEGIN 块依照它们呈现的次序履行。END 块依照它们呈现的相反次序履行。当履行时,上面的程序发生发生以下成果:

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