なぜ私はルビーがand
、or
よりも優先度が低く、&&
,||
、および代入演算子ですか?何か理由はありますか?Rubyに "and"、 "or"演算子の後ろに知恵はありますか?
答えて
私の推測は、Perlからの直接のキャリーオーバーです。オペレータor
とand
は、あとでPerl 5で特定の状況で追加されました。
try to perform big long hairy complicated action || die ;
をして
||
は、アクションの一部を飲み込んするつもりではなかったことを確認してください。たとえば
は、Perlで、ここで我々は書くことができるように||
は、低い優先順位を持っていたことを望みます。 Perl 5はor
を導入しました。新しいバージョンの||
は、この目的のために優先度が低くなりました。
あなたがor
なく||
を使用することができRubyでの例:
value = possibly_false or raise "foo"
あなたが||
を使用した場合、それは構文エラーになります。
オペレータの優先順位を制御できることは、特に可読性に懸念がある場合に便利です。条件付きステートメントの余分な括弧は、実際のロジックを不明瞭にすることがあります。
Rubyがブール演算子の優先レベルを持つ理由は、Rubyを書く前にMatzがPerlプログラマーであったことが主な原因であると考えています。そして、多くの主要な構文と演算子を借用しています。その言語。
ええと、それはなぜルビーがとても未成熟で、同時に非常に肥大しているのかを説明します。それでも私の頭を包み込むのはまだ難しいです。 – akostadinov
これらは非常に低い優先度を持つため、オペランドをかっこで囲む必要はありません。&&
と||
の場合があります。
私は、具体的には代入演算子の下にそれらを置くことを考えているので、代入を使って論理テストを書くことはできますが、括弧は付けません。
違いが優先です。 ||
,&&
は、=
より高い優先度を有するが、and
,or
が低い。あなたが行うことができながら、だから:
a = nil || 0
あなたがしなければならないでしょう:
a = (nil or 0)
を同じ効果を得るために。あなたがしている場合:
a = nil or 0
結果はまだ0ですが、値はnilになります。
- 1. SQL演算子:AND AND OR
- 2. の後ろに名前がありません。演算子YUIコンプレッサーsocket.io jsファイル
- 3. JQGrid Advance Search - 「AND」演算子と「OR」演算子を同時に使用できますか?
- 4. DrupalビューフィルタのOR演算子
- 5. Awk AND演算子
- 6. Regex.Replaceに "or"演算子の理論式のサイズ制限がありますか?
- 7. OneDrive iOS SDK - 検索APIクエリパラメータにOR演算子がありませんか?
- 8. フィルタのOR演算子()?
- 9. java演算子(XORとAND/OR)で遊ぶ
- 10. 論理演算子(AND、OR)NAで、TRUEとFALSE
- 11. Regexpとmysql: "AND"演算子があります
- 12. '00'演算子の後にオペランドがありません
- 13. CQLカサンドラOR演算子
- 14. Groovy式でリテラル演算子( "and"、 "or"など)を使用しますか?
- 15. c#バイトAND演算子
- 16. Javascriptの算術演算の加算演算子はありますか?
- 17. SQL OR演算子の評価方法
- 18. PythonでAND演算子とNOT演算子を使用する
- 19. "||" OR演算子in Rubyの条件付き
- 20. boost_interfaceに演算子[]または.at()メソッドがありますか?
- 21. 複数のAND演算子の代わりに
- 22. Rubyの<<演算子をオーバーライドする方法はありますか?
- 23. Meteor's Minimongoに$演算子の代わりがありますか?
- 24. Pythonの複数の 'in'演算子はありますか?
- 25. VHDLには三項演算子がありますか?
- 26. Rubyのオーバーライド==演算子
- 27. オーバーロード! Rubyの演算子
- 28. Rubyの単項*演算子
- 29. Yii複数のAND/ORを持つ条件 - 演算子の優先順位
- 30. Pythonに含意論理演算子がありますか?
do_somethingやdieのイディオムの名前はありますか?それはルビーで使用されますか? –
私はそれの名前は知らないが、Rubyではかなり一般的だ。 – Chuck
Perlは、dieに大きく傾きますが、Rubyはraiseを使用します。例外の利点は、あなたがそれを救うことができることです。 – tadman