编辑:有人指出我需要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
相关联。
请帮忙。
答案 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
(留下方法)。