问题描述
所以我试图理解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
我还没有尝试运行它,让我知道它是否有效。