DoubleRenderError避けに使う書き方で render :hoge and return
みたいになぜandを使うのかという話。
実例
たとえばこんな感じで test.rb
を作る
def normal(val) p val and return p "end of normal" end def shortcut(val) p val && return p "end of shortcut" end normal("hello") shortcut("hello hello")
期待値として
hello hello hello
と出てきてほしいが
$ ruby test.rb "hello" $
という感じで終わる
こうなる原理
andは&&に比べて 優先順位の低い演算子
と説明がある
左辺を評価し、結果が偽であった場合はその値(つまり nil か false) を返します。左辺の評価結果が真であった場合には 右辺を評価しその結果を返します。 and は同じ働きをする優先順位の低い演算子です。 - 演算子式 (Ruby 2.6.0) - and
そのためメソッド呼び出しの括弧を省略すると解釈が変わる
p val and return # 以下と同義 p(val) and return
p val && return # 以下と同義 p(val && return)
そのため、後者はval && return
が実行されるので、右式のreturnが評価され、pが実行される前に終わる