为什么我在使用ruby时直到使用相同的结果?

时间:2017-01-14 13:27:22

标签: ruby logic boolean-logic

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

' while'和'直到'操作

据我所知,

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上的用户输入。 谁能告诉我为什么会这样?或者这真的是一个错误吗? (这是一段时间的耻辱,直到操作员应该是一个非常基本的逻辑运算符吗?)

1 个答案:

答案 0 :(得分:6)

解决方案

相反
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 || truetrue

所以你的循环真的是while true

注意:Ruby中确实存在缺陷,其中一些可能很简单。但这并不意味着你不理解的任何东西都是一个bug。 ;)

语言和布尔逻辑

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

“你喜欢猫狗”

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

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