Ruby代码块

2025年3月17日 | 阅读 3 分钟

Ruby 代码块在其他编程语言中被称为闭包。它由一组代码组成,这些代码总是用大括号括起来,或者写在 do..end 之间。大括号语法总是比 do..end 语法具有更高的优先级。大括号的优先级高,do 的优先级低。

块可以有两种编写方式:

  • do 和 end 之间的多行(多行块不是内联的)
  • 大括号 {} 之间的内联

两者是相同的,并且具有相同的功能。

要调用一个块,你需要有一个与该块同名的函数。

一个块总是和一个函数一起被调用。块可以有自己的参数。

语法

示例

下面的示例显示了 多行 块。

输出

Ruby Blocks 1

下面的示例显示了 内联 块。

输出

Ruby Blocks 2


yield 语句

yield 语句用于在方法中调用一个带值的块。

示例

输出

Ruby Blocks 3

当执行 met 方法时,当我们到达 yield 行时,块中的代码被执行。当块执行完成时,met 方法的代码继续执行。

使用 yield 语句传递参数

可以使用 yield 语句传递一个或多个参数。

示例

输出

Ruby Blocks 4


块变量

我们可以在块参数的外部和内部使用相同的变量。让我们看下面的例子。

示例

输出

Ruby Blocks 5

在这个例子中,我们在块内将同一个变量作为块参数 x 使用,在块外作为一个变量 x 使用。


BEGIN 和 END 块

Ruby BEGIN 和 END 块用于声明文件正在加载和文件已经加载完毕。

示例

输出

Ruby Blocks 6


Ampersand 参数 (&block)

&block 是一种将块的引用(而不是局部变量)传递给方法的方式。

这里,& 之后的 block 只是引用的一个名称,可以使用任何其他名称来代替它。

示例

输出

Ruby Blocks 7

这里,方法 met 中的块变量是对块的引用。它通过 call 方法执行。call 方法与 yield 方法相同。


使用默认值初始化对象

Ruby 有一个名为 yield(self) 的初始化器。这里,self 是正在初始化的对象。

示例

输出

Ruby Blocks 8


下一个主题Ruby 模块