web-dev-qa-db-ja.com

rubyの `not`と`! `の違い

not!の評価が異なることをどこかで読んだことを思い出しますが、ドキュメントで見つけることができません。彼らは同義ですか?

78
0112

それらはほぼ同義ですが、完全ではありません。違いは、!notよりも優先順位が高いことです。&&||andorよりも優先順位が高いようです。

!はすべての演算子の中で最も高い優先順位を持ち、notは最も低い演算子の1つです。 Ruby docs で完全なテーブルを見つけることができます。

例として、以下を検討してください。

!true && false
=> false

not true && false
=> true

最初の例では、!highest優先順位を持っているため、事実上false && falseと言っています。
2番目の例では、notの優先順位がtrue && falseよりも低いため、falsetrue && falseからtrueに「切り替え」ました。

一般的なガイドラインは、notを使用する特別な理由がない限り、!に固執することです。 Rubyの!は、他のほとんどの言語と同じように動作し、notよりも「驚くほどではありません」。

111
Brennan

not演算子を理解する簡単な方法は、not true && false!(true && false)と同等であると見なすことです。

8
roniegh