2016-08-03 20 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

であると言うなら

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

の逆数が実際に

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

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

+2

「キーはありません」と「キーはbではありません」のいずれかが常に真です。したがって、あなたの状態は常に真です。 –

答えて

0

は、

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

注バイ行うことができます - 2つの条件のいずれかに該当する場合||演算子はtrueを返します。

希望に役立ちます。

+1

はい私はちょうどそれが作品を投稿しようとしていた!ありがとう – Daniel

1

あなたは「それは、このことができるかという」反対「は、それは、このことができないとということはできない」

関連する問題