我正在尝试确定循环case
语句的最佳方法,直到用户提供某个输入(在本例中为exit
)。
到目前为止,我的代码使用了while
循环,但是当我input = gets.chomp
一遍又一遍时,它似乎有点多余。
这是一些缩写代码:
input = gets.chomp
while input.downcase != 'exit'
case input.downcase
when 'help'
puts "Available commands are..."
input = gets.chomp
#more when statements go here...
else
puts "That is not a valid command. Type 'HELP' for available commands."
input = gets.chomp
end
end
puts "Goodbye!"
答案 0 :(得分:3)
我会这样写:
loop do
input = gets.chomp.downcase
case input
when 'help'
puts "Available commands are..."
# more when statements go here...
when 'exit'
break
else
puts "That is not a valid command. Type 'HELP' for available commands."
end
end
puts "Goodbye!"
loop
是针对这种情况而设计的,你只想干净地循环,然后最终在某种情况下爆发。
为了最清楚地了解代码的作用,我会在读取输入后立即放置exit
,而不是嵌入case
语句中。这是一个小问题,但是如果你正在编码而其他人必须帮助维护它,那么它是有用的:
loop do
input = gets.chomp.downcase
break if input == 'exit'
case input
when 'help'
puts "Available commands are..."
# more when statements go here...
else
puts "That is not a valid command. Type 'HELP' for available commands."
end
end
puts "Goodbye!"
答案 1 :(得分:2)
为什么不将while
更改为:
while (input = gets.chomp.downcase) != 'exit'
请注意,这也意味着您可以使用case input.downcase
而不是case input
,因为它已经被设为小写。
编辑:我在C的根源背叛了我......
正如评论中所提到的,这不是一个特别“红宝石式”的解决方案。当gets
返回nil
时,它还会导致堆栈跟踪。您可能更喜欢将其拆分为两行:
while (input = gets)
input = input.chomp.downcase
break if input == 'exit'
case input
# when statements
else
puts "That is not a valid command. Type 'HELP' for available commands."
end
end
由于以下几个原因,我将“退出”与case
条件分开:
break
在Ruby case
语句中对我更熟悉的其他语言的行为有所不同,所以我认为它不会做你想要的。你也可以这样做:
while (input = gets)
case input.chomp.downcase
when 'exit'
break
# other when statements
else
puts "That is not a valid command. Type 'HELP' for available commands."
end
end
编辑:我很高兴听到像Perl一样,Ruby也有$_
变量,gets
的值将被赋予:
while gets
case $_.chomp.downcase
when 'exit'
break
# other when statements
else
puts "That is not a valid command. Type 'HELP' for available commands."
end
end
答案 2 :(得分:1)
您甚至可以通过使用input
退出循环而不是在while条件中检查结果来摆脱break
while true
case gets.chomp.downcase
when 'exit'
break
when 'help'
# stuff
else
# other stuff
end
end