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 教程。