📅  最后修改于: 2023-12-03 14:47:09.795000             🧑  作者: Mango
在 Ruby 中,块(block)是一段在调用方法时可传递的代码,类似于匿名函数或 Lambda 表达式。块通常由大括号或 do/end
包含,可以在方法调用时被传递并执行。
使用大括号 {}
或 do/end
包含一个代码块,并将其传递给方法:
[1, 2, 3].each { |num| puts num }
# 等同于
[1, 2, 3].each do |num|
puts num
end
代码块的参数(在 |
中定义)是可选的,也可以定义多个参数:
[1, 2, 3].map { |num| num * 2 } # => [2, 4, 6]
[1, 2, 3].each_with_index { |num, index| puts "#{index}: #{num}" }
# 输出:
# 0: 1
# 1: 2
# 2: 3
如果方法调用的最后一个参数是一个块,可以直接将其放在方法调用括号的外面:
[1, 2, 3].each do |num|
puts num
end
# 等同于
[1, 2, 3].each { |num|
puts num
}
许多 Ruby 方法接受块参数作为它们的执行内容,例如 each
、map
和 reduce
。这些方法将块应用到每个元素上,并根据块的执行结果进行相应的操作:
[1, 2, 3].each { |num| puts num }
# 输出:
# 1
# 2
# 3
["foo", "bar", "baz"].map { |str| str.upcase }
# => ["FOO", "BAR", "BAZ"]
[1, 2, 3].reduce(0) { |sum, num| sum + num }
# => 6
块的执行结果是最后一个表达式的值。可以使用 return
关键字来显式返回一个值:
def includes_2?(nums)
nums.each do |num|
return true if num == 2
end
false
end
includes_2?([1, 2, 3]) # => true
includes_2?([4, 5, 6]) # => false
Ruby 方法通常用于处理集合中的元素,可以通过块传递一些自定义逻辑进行自定义处理。例如,可以使用 select
方法来从集合中选择一些元素:
[1, 2, 3, 4].select { |num| num.even? } # => [2, 4]
块也可以用于创建自定义方法:
def triple_and_sum(nums)
nums.map { |num| num * 3 }.reduce(0) { |sum, num| sum + num }
end
triple_and_sum([1, 2, 3]) # => 18
本文介绍了 Ruby 中的块,包括它们的语法、使用方法以及与方法的结合。块是 Ruby 非常有用的特性,可以显著提高代码的可读性和可维护性。