2016-08-03 183 views
0

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

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} 

缺少什么我在这里?

+4

https://en.wikipedia.org/wiki/De_Morgan%27s_laws – squiguy

+2

“关键不是一个”和“关键不是一个”将永远是真实的。因此,你的情况总是如此。 –

回答

0

我想你想实现什么,可以做副

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

注 - 如果有两个条件是真||运营商将返回true。

希望有所帮助。

+1

是的,我刚刚发布它的作品!谢谢 – Daniel

1

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

逆实际上是

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

如果你说“它可以是这样或那样的”相反的是“它不可能是这一点,并不能说”