2012-10-03 13 views
11

nil || false戻り値falsefalse || nilnilを返します。誰にもこれについての説明がありますか?nil ||偽と偽||ルビーのnil

+0

ボーナスポイントについては、なぜ 'nil ||偽と偽|| nil'はfalseに評価されます – pguardiario

+0

@pguardiario http://stackoverflow.com/questions/1840488/operator-precedence-for-and-in-ruby – x1a4

答えて

16

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

両方の例では、||式の左側が偽値と評価されるため、Rubyは右側を評価して返します。

+0

あなたの説明は本当にクリアです、ありがとう! – user1538814

3

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

+0

それは本当に良い説明だった、ありがとう! – user1538814

4

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

||は、単なるブール値テスト以外にも役立ちます。

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

意味:「optionsハッシュは:now値が含まれている場合、店舗@nowにそうでない場合は、Chronic.time_class.nowに頼る。chronic宝石のためにいくつかのコードを書くときにたとえば、私はちょうどそれを他の日を使用しましたデフォルトとして "。私はあなた自身のプログラムで多くの可能なアプリケーションを考えることができると確信しています。

&&は類似しています。まず、左側の式を評価し、falseまたはnilと評価すると、それを返します。さもなければ、右の式を評価し、それを返します(それが何であっても)。

これは、&&であることを意味します。は、単なるブール値テスト以外にも役立ちます。これを使って2行のコードを1つにまとめることができます。たとえば、次のように

do_something && do_something_else 

(あなたがdo_somethingの戻り値がfalseまたはnilになることはありませんことを知っている場合にのみ動作すること!)

あなたも同じで、「ガード」という表現を圧迫する&&を使用することができます"警護" それが何であるかのように行:

message && send_message(message) 

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

unless message.nil? 
    send_message(message) 
end 
+0

私はまだルビーを学んでいますが、これは本当に役に立ちます。 – user1538814

関連する問題