12

nil || falsefalseを返しfalse || nilますnil。誰かがこれについての説明がありますか?

4

3 に答える 3

19

Rubyでは、すべてが式であり、式はその中で評価された最後の値を返します。

どちらの例でも、式の左側||は偽の値に評価されるため、Rubyは右側を評価して返します。

于 2012-10-03T04:28:43.997 に答える
4

他の人が指摘したように、||最初に左側の式を評価します。「true」(falseまたはを除くnil)の場合は、それを返します。それ以外の場合は、右側の式を評価し、それを返します(それが何であっても)。

これは||、ブールテストだけでなく多くの場合に役立ちます。たとえば、先日、chronicgemのコードを作成するときに使用しました。

@now = options[:now] || Chronic.time_class.now

つまり、「optionsハッシュに:now値が含まれている場合は、それをに格納し@nowます。それ以外の場合は、デフォルトとしてフォールバックしChronic.time_class.nowます」。あなたはあなた自身のプログラムで多くの可能なアプリケーションを考えることができると確信しています。

&&類似しています。最初に左側の式を評価し、falseまたはに評価するとnil、それを返します。それ以外の場合は、右側の式を評価し、それを返します(それが何であっても)。

これは、ブールテストだけでなく多くの場合にも役立つことを意味&&しますこれを使用して、2行のコードを1つにまとめることができます。例えば:

do_something && do_something_else

(これは、の戻り値がまたはにdo_somethingなることはないことがわかっている場合にのみ機能します!)falsenil

&&また、「ガード」と同じ行に「ガード」式を絞り込むために使用することもできます。

message && send_message(message)

置き換えることができます:

unless message.nil?
  send_message(message)
end
于 2012-10-03T04:38:41.803 に答える
3

||最後に評価された式の結果を返します。trueLHSを評価して値を見つけた場合、LHSを取得します。それ以外の場合は、RHSを取得します(そのRHSが何であっても)。

于 2012-10-03T04:28:53.123 に答える