好的,我在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上的用户输入。 谁能告诉我为什么会这样?或者这真的是一个错误吗? (这是一段时间的耻辱,直到操作员应该是一个非常基本的逻辑运算符吗?)
答案 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 || true
,true
所以你的循环真的是while true
。
注意:Ruby中确实存在缺陷,其中一些可能很简单。但这并不意味着你不理解的任何东西都是一个bug。 ;)
从句子中提取布尔逻辑并不总是那么容易:
“你喜欢猫和狗”
您想知道您是否喜欢animal
。为此,您需要检查animal
是狗是还是。
如果你检查animal
是一只狗和一只猫,你肯定不会喜欢这只动物!