||
Kernel.puts 'odd' || val.odd?
これは
Kernel.puts 'odd' if val.odd?
と同じ意味です。
値が設定されていない場合、初期値を設定する能力もあります。
Kernel.puts hoge ||= "test" test => nil
値が入っている変数に対しては何もしません。
また、空変数にメソッド付きで呼び出すとエラーを吐きます。
hoge = "test" Kernel.puts hoge ||= hoge.upcase #=>test hoge = nil Kernel.puts hoge &&= hoge.upcase #=> NoMethodError: undefined method `upcase' for nil:NilClass
&&
> i.even? && Kernel.puts('even') #=> false
これは頭から解釈されます。
最初の式で弾かれたらそこで停止します。
先ほどとは違い、指定されたモノで上書きされます。
> Kernel.puts hoge &&= "ge" ge => nil
値の設定についても、上書きして実行します。
また、空変数はnilを返してくれる仕様です。
流石に違うクラスを指定すると読んでくれませんが
hoge = "test" => "test" Kernel.puts hoge &&= hoge.upcase #=>TEST hoge = nil Kernel.puts hoge &&= hoge.upcase #=> hoge = 1 Kernel.puts hoge &&= hoge.upcase #=>NoMethodError: undefined method `upcase' for 1:Fixnum