Ruby-我有自己喜欢的代码,但我希望它一直循环直到其中一个条件为真

问题描述

所以我试图理解ruby中的循环函数。我有一部分代码可以实现我想要的功能。但是我想循环以 math 变量开头的部分,直到满足其中一个条件。我已经对此进行了更新,以显示我尝试过的一种方法。看过这里并继续(https://launchschool.com/books/ruby/read/loops_iterators),但我不了解该过程。我真的很新。如果您有资源,可以参考,那将是很棒的。如果您有一个解决方案,其中提供了一些提示,说明为什么它可以更好地工作。这就是我尝试过的。可能是可笑的坏。

puts "Welcome to math.rb!"
puts "Enter a number!"
     user = gets.to_i
puts "Enter another number!"
    user2 = gets.to_i
puts "What would you like to do with your number?"
math = gets.chomp.downcase
until math == ["add","subtract","multiply"]
case math
when "add"
    puts user + user2
when "subtract"
    puts user - user2
when "multiply"
    puts user * user2
else
    puts "I don't understand! Type a command like:
-add
-subtract
-multiply"
end

解决方法

使用loop运算符在代码周围放入无限循环。将next放在“不良”条件之后,返回循环的开头。在所有其他情况下,代码将进入无限循环break之前的最后end运算符,这将导致循环退出。如果您不需要重用math变量,则可以完全删除它。在这里它仅使用一次,因此我将其删除,取而代之的是gets.chomp.downcase语句中直接评估case,而无需使用临时变量。

#!/usr/bin/env ruby

puts "Welcome to math.rb!"
puts "Enter a number!"
     user = gets.to_i
puts "Enter another number!"
    user2 = gets.to_i
puts "What would you like to do with your number?"

loop do
  case gets.chomp.downcase
  when "add"
    puts user + user2
  when "subtract"
    puts user - user2
  when "multiply"
    puts user * user2
  else
    puts "I don't understand! Type a command like:
-add     
-subtract               
-multiply"
    next
  end
  break
end

另请参见:

loop是在Ruby中创建无限循环的最常用方法:Creating an Infinite Loop
loop是采用block的内核方法,它在无限循环中引入了新的局部变量作用域。这与while true无限循环不同,后者没有引入新的作用域。因此,while true可能会将变量泄漏到循环之外,这可能是意外的,并在以后导致细微的错误:https://stackoverflow.com/a/45070639/967621

,

我想您正在构建类似命令行的工具,对吗? 因此,您可以使用Kernel#loop

loop do  # begin of loop
  math = gets.chomp.downcase
  case math
  when "add"
    puts user + user2 
  when "subtract"
    puts user - user2
  when "multiply"
    puts user * user2
  when "exit"
    break    # here is your conditional to break from loop
  else
    puts "I don't understand! Type a command like: \n-add\n-subtract\n-multiply"
  end
end

我还没有尝试运行它,让我知道它是否有效。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...