demorgans定律-Ruby if语句的多个条件不相等



我不明白为什么不等于的多个if语句条件不起作用。在irb

2.3.0 :009 > H = Hash["a" => 100, "b" => 200, "c" => 1000, "d" => 2000]
 => {"a"=>100, "b"=>200, "c"=>1000, "d"=>2000}
2.3.0 :011 > H.each do |key, v|
2.3.0 :012 >     if (key != "a") || (key != "b")
2.3.0 :013?>     puts key
2.3.0 :014?>     end
2.3.0 :015?>   end
a
b
c
d
 => {"a"=>100, "b"=>200, "c"=>1000, "d"=>2000} 
2.3.0 :016 > H.each do |key, v|
2.3.0 :017 >     if key != "a" || key != "b"
2.3.0 :018?>     puts key
2.3.0 :019?>     end
2.3.0 :020?>   end
a
b
c
d
 => {"a"=>100, "b"=>200, "c"=>1000, "d"=>2000} 
2.3.0 :021 > H.each do |key, v|
2.3.0 :022 >     if !(key == "a") || !(key == "b")
2.3.0 :023?>     puts key
2.3.0 :024?>     end
2.3.0 :025?>   end
a
b
c
d
 => {"a"=>100, "b"=>200, "c"=>1000, "d"=>2000} 

但这是有效的:

2.3.0 :026 > H.each do |key, v|
2.3.0 :027 >     if (key == "a") || (key == "b")
2.3.0 :028?>     puts key
2.3.0 :029?>     end
2.3.0 :030?>   end
a
b
 => {"a"=>100, "b"=>200, "c"=>1000, "d"=>2000} 

我在这里错过了什么?

的逆

if (key == "a") || (key == "b")

实际上是

if !(key == "a") && !(key == "b")

如果你说"它可以是这个或那个",相反的是"它不可能是这个也不可能是那个"

我认为你想要实现的目标可以通过-来实现

H.each do |key, v|
  if (key != "a") && (key != "b")
    puts key
  end
end

注意-如果两个条件中的任何一个为true,则||运算符将返回true。

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新