when 1
add(first_number, second_number)
begin
print "Calculate again? [y/n]: "
response = gets.chomp
if response.downcase =~ /[n]/
break
elsif response.downcase =~ /[^ny]/
puts "please input y or n"
else response.downcase =~ /[y]/
puts "yay"
end
end
修改
道歉。这是一个改变版本。
我现在的问题是,当用户选择输入除这些字符以外的其他内容时,如何继续重复“请输入y或n”的问题?
答案 0 :(得分:3)
Ruby的作者 Matz 对begin <code> end while <condition>
感到遗憾。相反,他建议使用Kernel#loop
,
<强> e.g。强>
while
语句修饰符通常会检查进入循环的条件before
。但如果 while
语句修饰符位于begin ... end
语句上,则它至少循环一次。与until
语句修饰符相同。
while
的示例val = 0
begin
val += 1
puts val
end while val % 6 != 0
直到
的示例val = 0
begin
val += 1
puts val
end until val % 6 == 0
您想了解breaks
..
中断的示例,除非
val = 0
loop do
val += 1
puts val
break unless val %6 != 0
end
中断
的示例val = 0
loop do
val += 1
puts val
break if val %6 == 0
end
在所有这四个示例中,打印数字1, 2, 3, 4, 5, 6
。
我希望这个答案能让你明白......
为了您的参考,我找到了关于 Table of Contents 的非常好的代码示例您可以执行(运行)该代码 here online 并检查结果。如果我的答案以某种方式帮助你,那么你可以接受答案。 :)
答案 1 :(得分:2)
我可能会将确认提取到一个方法中,例如:
def confirm(message)
loop do
print "#{message} [y/n]: "
case gets.chomp
when 'y', 'Y' then
return true
when 'n', 'N'
return false
else
puts 'please input y or n'
end
end
end
并使用它:
loop do
puts 'Calculating...'
sleep 5 # calculation
puts '42'
break unless confirm('Calculate again?')
end
用法:
$ ruby test.rb
Calculating...
42
Calculate again? [y/n]: maybe
please input y or n
Calculate again? [y/n]: y
Calculating...
42
Calculate again? [y/n]: n
$
答案 2 :(得分:0)
你应该在一个单独的线程中运行你的loopy方法,然后 当用户按下键盘上的任何键时杀死该线程......