Ruby next 关键字
最后修改日期:2025 年 4 月 27 日
本教程解释了如何使用 Ruby 的 next 关键字。这个流程控制语句在循环和代码块中跳到下一个迭代。
next 关键字会立即跳转到循环的下一个迭代。它会跳过当前迭代中任何剩余的代码。在代码块中,它将控制权返回给调用它的方法。
next 对于过滤元素或跳过无效数据很有用。它可以选择性地传递一个值以从代码块中返回。多个条件可以触发不同的跳过行为。
循环中的基本 next
这个简单的例子演示了在循环中跳过偶数。当触发时,next 语句会跳到下一个迭代。
(1..10).each do |i|
next if i.even?
puts "Processing odd number: #{i}"
end
循环处理 1 到 10 的数字。当 i.even? 为真时,next 会跳过 puts 语句。只有奇数会被打印。
带有值的代码块中的 next
next 可以将一个值从代码块返回给调用它的方法。这个例子展示了如何在跳过某些数字的同时转换它们。
result = (1..5).map do |n| next n * 10 if n.odd? n end puts result.inspect # [10, 2, 30, 4, 50]
奇数乘以 10 并通过 next 返回。偶数则直接返回其原始值。结果结合了这两种情况。
跳过嵌套循环
next 只影响最内层的循环。这个例子展示了带有条件跳过的嵌套循环。
(1..3).each do |i|
puts "Outer loop: #{i}"
('a'..'c').each do |j|
next if i == 2 && j == 'b'
puts " Inner loop: #{j}"
end
end
当 i 为 2 且 j 为 'b' 时,next 只会跳过内层循环的 puts。外层循环不受影响地继续。
while 循环中的 next
next 在 while 循环中的作用与迭代器类似。这个例子在满足条件时跳过处理。
count = 0
while count < 5
count += 1
next if count == 3
puts "Count is #{count}"
end
循环在每次迭代中增加 count。当 count 等于 3 时,next 会跳过 puts 语句。所有其他值都会被打印。
带有多个子句的条件 next
多个条件可以触发 next 并产生不同的行为。这个例子展示了复杂的过滤逻辑。
(1..20).each do |num|
next puts "Skipping #{num}: too small" if num < 5
next puts "Skipping #{num}: multiple of 5" if num % 5 == 0
next if num.even?
puts "Processing odd number #{num} (5-20, not multiple of 5)"
end
小于 5 的数字、5 的倍数和偶数都会被跳过。每种情况都有不同的输出行为。只有符合条件的奇数会被处理。
方法代码块中的 next
当 next 在传递给方法的代码块中使用时,它会将控制权返回给方法。这个例子演示了这种行为。
def process_items
yield(1)
puts "After first yield"
yield(2)
puts "After second yield"
yield(3)
end
process_items do |i|
next if i == 2
puts "Processing #{i}"
end
输出显示,当触发 next 时,控制权会返回到方法。 "Processing 2" 消息被跳过,但方法的执行会继续。
代码块中的 next 与 return 对比
这个例子对比了代码块中的 next 和 return。next 只退出代码块,而 return 则退出包含它的方法。
def test_next
[1, 2, 3].each do |i|
next if i == 2
puts "next: #{i}"
end
puts "After next block"
end
def test_return
[1, 2, 3].each do |i|
return if i == 2
puts "return: #{i}"
end
puts "This won't print"
end
test_next
test_return
next 只跳过迭代 2,然后继续。return 在迭代 2 时退出整个方法。最后的 "This message appears only in test_next." 消息只在 test_next 中出现。
来源
本教程涵盖了 Ruby 的 next 关键字,并通过示例展示了循环控制、代码块行为以及与其他流程控制语句的比较。
作者
列出 所有 Ruby 教程。