Ruby - 如何执行某些操作然后在IF块内部进行中断?

时间:2016-09-06 17:24:28

标签: ruby debugging break

编辑:有人指出我需要break正确,所以我正在编辑问题

方案:
请参阅以下代码:

print "UserID: "
uid = $stdin.gets.chomp
print "Password: "
pwd = $stdin.gets.chomp
usr_inp =  "#{uid};#{pwd}"
login_status = -1
# login_info.txt - "#{userid};#{password}" - format
File.open(File.join(File.dirname(__FILE__), 'login_info.txt'), "r") do |f|
    f.each_line do |line|
        puts line
        if (line.chomp == usr_inp)
            login_status = 1
        elsif (line.chomp != usr_inp && line.include?(uid)) #case a person inputs invalid password
            login_status = 0
        elsif (line.chomp != usr_inp && !(line.include?(uid))) #case a person inputs an invalid id
            login_status = 2
        end
    end
end
if (login_status == 1)
    puts "\nLogged in successfully: #{uid}"
elsif (login_status == 2)
    puts "\nSorry, that Employee does not exist."
elsif (login_status == 0)
    puts "\nLogin failed.\nPlease check credentials."
end

问题:
Ruby中存在break if (condition)。但是,我不会这样做 我想做点什么:

if (condition x)
    (do something)
    break
elsif (condition y)
    (do something else)
    break
else
    (whatever)
end

也许我不理解ruby代码是如何工作的。每当我尝试将break用于我想要使用它时,它就会与下一个elsif相关联。 请帮忙。

1 个答案:

答案 0 :(得分:2)

这取决于您的需求和需求。

这样的剧本:

condition = 1
case condition
  when 1
    puts 'one'
    break
  when 2
    puts 'two'
  else
    puts 'Other %s' % condition
  end

puts 'end'

有语法错误。 break留下一个循环,没有循环。

但是通过循环,这可行:

[1,2,3].each{|condition|
  case condition
    when 1
      puts 'one'
      break
    when 2
      puts 'two'
    else
      puts 'Other %s' % condition
    end
    puts 'end'
  }
  puts 'very end'

输出结果为:

one
very end

你看,循环停止了。

如果你想继续使用下一个元素循环,你需要next(对不起,我只是不知道break在Java中真正做了什么 - 它是' s自我上一次Java程序以来已经很长时间了):

[1,2,3].each{|condition|
  case condition
    when 1
      puts 'one'
      next
    when 2
      puts 'two'
    else
      puts 'Other %s' % condition
    end
    puts 'end %s' % condition
  }
  puts 'very end'

结果:

one
two
end 2
Other 3
end 3
very end

当您不在循环中时(例如在代码段中),您可以使用exit(离开程序)或return(留下方法)。