Rubyでnilとfalseを区別する方法が他にもある話

soutaro.hatenablog.com

他にもいろいろあるという話をTwitterで聞きました。下のツイートから大体見られるんじゃないかな。

TracePointで私のアイディアを騙すとか、引数の評価に入れるとTracePointを回避できるとか、 $@false を代入すると例外が上がるとか、 false..nil にして確実に例外が上がるようにするとか、いろいろな方法があることがわかりました。Rubyの勉強になりますね。

今の時点で決定版かなーと思っているのは

ですかねぇ。(わかりませんが。)

一つだけわかったこととしては、「Ruby 2.3より前では nilfalse が区別できなかった」というのは間違いかも、というところで、一筋縄ではいきませんでしたが2.3以降でやるときと同程度の仮定で nilfalse を区別できていたような気がします。

ちなみに、「 is_nil? を呼び出す方法がない」というのがオチのつもりでした。(誰かに上書きされないことが保証できないので。)