Ruby do 关键字
最后修改日期:2025 年 4 月 27 日
本教程将解释如何使用 Ruby 的 do
关键字来创建代码块。代码块是匿名函数,可以传递给方法。
do
关键字在 Ruby 中用于开始一个多行代码块。它与 end
配对,用于界定代码块的主体。代码块可以接受参数。
Ruby 代码块有两种形式:多行代码块使用 do...end
,单行代码块使用 {...}
。对于较长的代码块,使用 do
形式更易读。
带 Array#each 的基本 do 代码块
此示例显示了 do
与 each
方法的最简单用法。该代码块会为每个数组元素执行一次。
fruits = ["apple", "banana", "cherry"] fruits.each do |fruit| puts "I love #{fruit}s!" end
do
关键字开始代码块,|fruit|
是参数。该代码块会运行三次,每次对应一个数组元素。
带多个参数的 do 代码块
代码块可以接受多个参数。此示例使用 each_with_index
,它同时提供值和索引。
colors = ["red", "green", "blue"] colors.each_with_index do |color, index| puts "Color #{index + 1}: #{color}" end
代码块同时接收数组元素及其索引。参数在管道符内用逗号分隔。这将打印一个编号的颜色列表。
带 do 代码块的自定义方法
方法可以使用 yield
接受代码块。此示例展示了如何创建一个接受代码块的方法。
def repeat(times) times.times do |i| yield(i + 1) end end repeat(3) do |count| puts "Iteration #{count}" end
repeat
方法会根据指定的次数 `yield` 给它的代码块。代码块将当前迭代计数作为参数接收。
带 Hash 迭代的 do 代码块
可以使用 each
迭代 Hash,它会生成键值对。do
代码块使这更加易读。
person = { name: "Alice", age: 30, occupation: "Developer" } person.each do |key, value| puts "#{key.capitalize}: #{value}" end
代码块为每个 Hash 对接收两个参数。do
形式非常适合像此示例这样的多行 Hash 处理。
带文件操作的 do 代码块
文件操作通常使用代码块进行自动资源管理。此示例展示了带代码块的 File.open
。
File.open("data.txt", "w") do |file| file.puts "Line 1" file.puts "Line 2" file.puts "Line 3" end
代码块执行后,文件会自动关闭。这种模式确保了即使代码块内发生错误,也能正确清理资源。
嵌套的 do 代码块
代码块可以嵌套以进行多维迭代。此示例展示了带 do
代码块的嵌套 each
调用。
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] matrix.each do |row| row.each do |cell| print "#{cell} " end puts end
外部代码块处理每一行,而内部代码块处理单个单元格。do
形式清晰地展示了嵌套结构。
带 begin/rescue 的 do 代码块
代码块可以包含异常处理。此示例将代码块代码包装在 begin/rescue
中进行错误管理。
def safe_divide(a, b) begin yield(a, b) rescue ZeroDivisionError puts "Cannot divide by zero!" end end safe_divide(10, 2) do |x, y| puts "#{x} / #{y} = #{x / y}" end safe_divide(10, 0) do |x, y| puts "#{x} / #{y} = #{x / y}" end
代码块包含除法逻辑,而方法处理错误。这种关注点分离使代码更易于维护。
来源
本教程涵盖了 Ruby 的 do
关键字,并提供了实际示例,展示了迭代、方法代码块、文件操作和错误处理。
作者
列出 所有 Ruby 教程。