如何打破循环?

时间:2014-09-18 05:31:41

标签: ruby loops

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”的问题?

3 个答案:

答案 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方法,然后 当用户按下键盘上的任何键时杀死该线程......