Rubyの「&&」および「and」演算子

あるインタビューで、 Rubyで書くとき、論理演算子「And」を表すために「and」演算子または2つのアンパサンド文字「&&」を使用しますか?」 実際、昔の習慣では、私は常に2つのアンパサンド文字「&&」を使用し 、それについては考えませんでした。 そこで彼は答え、彼らは私に「良い」と言った。

そして、あなたは、 見過ごされずに、Rubyの「and」「&&」の違いを明確に説明できますか?


次のコードがあるとしましょう。
total = user_messages.empty? and user_messages.total


そして、 合計の値は何ですか? ユーザーの投稿数は? いや! 問題は、インタープリターが次のようにそれを読み取ることです。
(total = user_messages.empty?) and user_messages.total



したがって、 合計trueまたはfalseになります 。 これはあなたが望んでいたものではありません! なぜこれが起こっているのですか? Rubyには演算子の優先順位テーブルがあるからです。 これを研究した結果、 &&演算子を使用できることがわかりました。
コードの次の2行はまったく同じです。

total = user_messages.empty? && user_messages.total
total = (user_messages.empty? && user_messages.total)



演算子orおよび||を使用した同様のストーリー 。
コードを見てください...

PSそして、これは最終的な理解(または誤解)のための別の例です
irb(main):001:0> x=1
=> 1
irb(main):002:0> y=2
=> 2
irb(main):003:0> x || y && nil
=> 1
irb(main):004:0> x or y and nil
=> nil

Source: https://habr.com/ru/post/J94566/


All Articles