电脑生活派
柔彩主题三 · 更轻盈的阅读体验

Ruby循环语句怎么写?实用写法一学就会

发布时间:2025-12-10 18:41:19 阅读:251 次

在处理数据库批量操作时,比如导出用户数据、清理过期记录,总免不了要用到ref="/tag/147/" style="color:#C468A7;font-weight:bold;">循环。Ruby 作为一门简洁优雅的语言,提供了多种写法来实现循环,掌握这些基本功,写脚本效率翻倍。

最常用的 for 循环

for 循环适合遍历数组或范围,写法直观。比如要打印1到5的数字:

for i in 1..5
  puts i
end

如果是处理数据库查出来的用户列表,也可以这么用:

users = ['Alice', 'Bob', 'Charlie']
for user in users
  puts "正在处理用户:#{user}"
end

更 Ruby 风格的 each 循环

Ruby 社区更推荐使用 each,它更符合语言习惯。上面的例子改写成 each 就是:

users.each do |user|
  puts "正在处理用户:#{user}"
end

或者用大括号简写:

users.each { |user| puts "Hello, #{user}" }

在处理 ActiveRecord 查询结果时特别顺手,比如批量更新用户状态:

User.where(active: false).each do |user|
  user.update(last_seen: Time.now)
end

while 循环按条件执行

当你不确定循环次数,只关心某个条件是否成立时,while 就派上用场了。比如监控日志文件是否写入完成:

processing = true
while processing
  if File.size('log.txt') > 1024
    processing = false
  else
    sleep 1
  end
end

until:和 while 刚好相反

until 是“直到条件为真才停止”,逻辑上和 while 相反。比如等待数据库备份完成:

until File.exist?('backup.sql')
  puts '等待备份中...'
  sleep 2
end
puts '备份已就绪!'

break 和 next 控制流程

有时候不需要走完整个循环。比如遍历用户时跳过测试账号:

users.each do |user|
  next if user == 'test_user'
  puts "处理正式用户:#{user}"
end

又或者找到目标就停下,避免浪费资源:

users.each do |user|
  if user == 'admin'
    puts '发现管理员,停止扫描'
    break
  end
  puts "检查用户:#{user}"
end