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