Ruby for 关键字
最后修改日期:2025 年 4 月 27 日
本教程解释了如何使用 Ruby 的 for
关键字进行迭代。for
循环提供了一种遍历集合的简洁语法。
for
关键字创建了一个迭代集合的循环。它会自动将每个元素分配给一个循环变量。循环将一直运行直到所有元素都被处理。
虽然 Rubyist 通常更喜欢 each
,但 for
在某些场景下仍然有用。它对于来自其他语言的开发者来说更熟悉。循环变量在循环结束后仍然在作用域内。
基本 for 循环与范围
这个简单的例子演示了如何迭代一个数字范围。循环变量按顺序获取每个值。
for i in 1..5 puts "Current number: #{i}" end puts "Final value: #{i}"
循环从 1 到 5(包含)。请注意,变量 i
在循环结束后仍然可以访问。这与块级作用域的迭代器不同。
迭代数组
数组与 for
循环自然配合。每个元素都会依次通过循环变量可用。
fruits = ["apple", "banana", "cherry"] for fruit in fruits puts "Fruit: #{fruit.capitalize}" end puts "Last fruit: #{fruit}"
循环按顺序处理每个数组元素。变量 fruit
保存每个值。同样,在循环完成后它仍然存在。
嵌套 for 循环
for
循环可以嵌套以处理多维数据。每个级别都有自己的循环变量。
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] for row in matrix for cell in row print "#{cell} " end puts end
外层循环处理每一行,而内层循环处理单个单元格。这种模式适用于任何嵌套的可枚举结构。
for 循环与 Hash
Hash 需要特殊处理,因为它们包含键值对。循环变量将成为包含这两个元素的数组。
person = {name: "John", age: 30, city: "New York"} for key, value in person puts "#{key}: #{value}" end
循环将每个键值对解包到单独的变量中。如果没有这两个变量,您将得到包含两个元素的数组。
迭代期间修改元素
for
循环允许在迭代期间修改集合元素。更改会影响原始集合。
numbers = [1, 2, 3, 4, 5] for num in numbers num *= 2 end puts numbers.inspect
此示例尝试将每个数字加倍。但是,原始数组保持不变,因为 num
是一个副本。使用 map!
进行原地修改。
for 循环中的 Break 和 Next
控制流关键字在 for
循环中的作用与其他循环类似。break
会完全退出,而 next
会跳到下一个。
for i in 1..10 next if i % 2 == 0 break if i > 7 puts "Odd number: #{i}" end
循环使用 next
跳过偶数,并在达到 7 后使用 break
完全停止。这些关键字提供了精确的流程控制。
for 与 each 的对比
本示例将 for
与 Ruby 更倾向的 each
迭代器进行了对比。主要区别在于变量作用域和返回值。
# for loop version for x in [1, 2, 3] puts x end puts "x after for: #{x}" # each version [1, 2, 3].each do |y| puts y end puts "y after each: #{y}" rescue puts "y undefined"
for
循环的变量会保留,而 each
的块变量则不会。此外,for
返回原始集合。
来源
本教程通过示例介绍了 Ruby 的 for
关键字,包括范围迭代、数组处理、嵌套循环和控制流。
作者
列出 所有 Ruby 教程。