【问题标题】:Ruby - I have code that I like but I would like it to loop until one of the conditions is trueRuby - 我有我喜欢的代码,但我希望它循环,直到其中一个条件为真
【发布时间】:2020-12-17 21:39:03
【问题描述】:

所以我试图理解 ruby​​ 中的循环函数。我有一大段代码可以做我想做的事。但我想循环以 ma​​th 变量开头的部分,直到满足其中一个条件。我已经更新了这个以显示我尝试过的一种方法。看了这里和上(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

【问题讨论】:

  • "我想循环播放" 所以循环播放。您的代码中根本没有循环。
  • 好吧,老实说,这就是我被卡住的地方。我尝试了多种方法来让代码的下半部分循环。我不清楚如何实现它。我整晚都在阅读博客和指南。我的眼睛是交叉的。可能会离开它一段时间。
  • “我已经尝试了多种方法来让代码的下半部分循环” 让我们看看其中的一个
  • 更新了!这是我尝试过的一件事。但这现在超出了我的范围。
  • 你错过了end

标签: ruby loops


【解决方案1】:

我猜你正在构建类似命令行的工具,对吧? 那么,你可以使用什么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

我没有尝试运行它,如果它有效,请告诉我。

【讨论】:

  • 感谢您来到这里。这对我的情况不太适用。或者我错过了什么。我将分享我的完整代码,以澄清我在这里尝试做的事情。但是我忘记了添加一行的 \n 命令。谢谢!
【解决方案2】:

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

#!/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

【讨论】:

  • 我没有意识到休息必须在每个“好”条件之后!谢谢!
  • 感谢@CarySwoveland 提供有关改进此代码的建议。
猜你喜欢
  • 2022-11-16
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多