if 文の返り値がnilになるとき
irb(main):001:0> hoge = 'hoge' => "hoge" irb(main):002:0> hoge = 'huga' if hoge.nil? => nil
いわゆる後置ifで、条件を満たさなかった場合(上記だとhoge.nil?)にnilが返ってくる。そういう仕様だ。
右辺の条件が成立する時に、左辺の式を評価してその結果を返します。条件が成立しなければ nil を返します。
条件が満たされない場合は、左辺が評価されると思っていた。つまりhogeが評価されて'hoge'が返却されると。 繰り返しの処理のなかで使用していてなんでnilになるのかわからず詰まってしまっていた。
ちなみに、elseのないif文でも同じ処理になる。勉強になった。
irb(main):001:0> hoge = 'hoge' => "hoge" irb(main):002:1* if hoge.nil? irb(main):003:1* p 'foo' irb(main):004:0> end => nil irb(main):005:0>
(了)