未定義値

|matz> いや、私もです。諸般の事情でnilとfalseを分離したときには相当
|matz> 気持ち悪かったです。今思えば、しょうがなかったと思うけど。
|
|nil と false を分離した事情ってどういう物だったんですか?

今回話題にもなっているHashの未定義値とのからみがきっかけだったと思います。
で、いろいろ話しているうちにSchemeにおける#fと#undefinedのように偽と未定義値を分離すべきと感じたのが理由ですね。
で、Schemeのように#fのみが偽、#undefinedは真とすればすっきりしたのでしょうが、過去との互換性もありましたし、未定義値が偽と言うのはいろいろ都合が良いので、やや(かなり、いや相当)美しくないものの、falseとnilの両方が偽といういびつな現状になりました。

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/7999

作者的にはnilとfalseを分離したことは気持ち悪いと思ってたのか。なんか意外な感じ。
ついでに他の言語での未定義値の扱いを調べてみた。

Ruby nil
Gauche (undefined)
JavaScript undefined
Perl undef
PHP undef
Python None