为什么我在 ruby 中使用 while 和 until 得不到相同的结果?

Why am I not getting same result using while and until in ruby?

好的,我在 windows x64 上使用 Ruby 2.26。 问题是,我真的只是学习如何编码的新手,所以我不确定这是否真的是一个错误,或者这只是我在某个地方犯的错误,因为这个错误非常非常简单,有点愚蠢(?)@_ @

'while' 和 'until' 运算符。

据我所知,

action = gets.chomp
until action == "a" || action == "b"
  puts "Answer a or b"
  action = gets.chomp
end

puts "The answer: " + action

action = gets.chomp
while action != "a" || action != "b"
  puts "Answer a or b"
  action = gets.chomp
end

puts "The answer: " + action

应该会产生同样的结果。但是在这里使用 'while' 运算符,即使我将 "a" 或 "b" 放在 powershell 上的用户输入上,也会让我无限循环。 谁能告诉我这是为什么?或者这真的是一个错误? (这很遗憾,因为 while and until 运算符应该是一个非常基本的逻辑运算符,对吧?)

解决方案

相反
action == "a" || action == "b"

action != "a" && action != "b"

参见 De Morgan's Laws

您的代码

action != "a" || action != "b"

总是 true :

  • 如果action"a",就是false || true,也就是true
  • 如果action"b",就是true || false,也就是true
  • 如果action两者都不是,就是true || true,也就是true

所以你的循环确实是 while true

注意:Ruby 中肯定存在错误,其中一些可能非常简单。但这并不意味着您不理解的任何内容都是错误。 ;)

语言和布尔逻辑

从句子中提取布尔逻辑并不总是那么容易:

"You like cats and dogs"

您想知道您是否喜欢animal。为此,您需要检查 animal 是狗 还是 猫。

如果你检查 animal 是一只狗 一只猫,你肯定不会喜欢这种动物!