我目前正在学习ruby。我尝试了一小段代码,它将根据城市返回国家
代码:
message = nil
flag = true
while true
print "Enter city name : "
city_name = gets.chomp
message = case city_name
when "Frankfurt" then "It is in germany"
when "Paris" then "It is in France"
else "Not present in memeory!!!"
break
end
puts "Message is : #{message}"
end
puts "Out of the loop"
为什么当我输入法兰克福和巴黎以外的任何其他值时,我只得到"out of loop
";打印而非"Not present in memory
">
根据我的理解,'then
'命令后给出的字符串被返回到变量'message
'。为什么在else之后给出的字符串没有返回给变量?当我尝试没有break
语句,它似乎工作得很好。
break
的文档解释它用于"提前离开一个块";,特别是"从while循环结束";。
在你的代码中,那个块是
while true
# ...
end
当调用break
时,块立即离开,在end
之后继续执行。
正如您已经发现的那样,如果您不想跳出循环,修复方法是删除break
。另外,如果没有条件,可以使用loop
代替while true
。
您可能需要指定另一个值来显式地中断循环,例如通过检查empty?
string:
loop do
print "Enter city name: "
city_name = gets.chomp
break if city_name.empty?
message = case city_name
when "Frankfurt"
"It is in Germany"
when "Paris"
"It is in France"
else
"Not present in memory!!!"
end
puts "Message is: #{message}"
end
puts "Out of the loop"
的例子:
输入城市名称:Frankfurt(消息是:它在德国输入城市名称:Paris(消息是:它在法国输入城市名称:London(消息显示:Not present in memory!!)输入城市名称:(退出循环