未定義値
|matz> いや、私もです。諸般の事情でnilとfalseを分離したときには相当
|matz> 気持ち悪かったです。今思えば、しょうがなかったと思うけど。
|
|nil と false を分離した事情ってどういう物だったんですか?今回話題にもなっているHashの未定義値とのからみがきっかけだったと思います。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/7999
で、いろいろ話しているうちにSchemeにおける#fと#undefinedのように偽と未定義値を分離すべきと感じたのが理由ですね。
で、Schemeのように#fのみが偽、#undefinedは真とすればすっきりしたのでしょうが、過去との互換性もありましたし、未定義値が偽と言うのはいろいろ都合が良いので、やや(かなり、いや相当)美しくないものの、falseとnilの両方が偽といういびつな現状になりました。
作者的にはnilとfalseを分離したことは気持ち悪いと思ってたのか。なんか意外な感じ。
ついでに他の言語での未定義値の扱いを調べてみた。
Ruby | nil | 偽 |
Gauche | (undefined) | 真 |
JavaScript | undefined | 偽 |
Perl | undef | 偽 |
PHP | undef | 真 |
Python | None | 偽 |