[ruby-list:48663] Re: == 演算子でちとはまりました
From:
"TOYODA Eizi" <toyoda@...>
Date:
2012-03-23 11:44:15 UTC
List:
ruby-list #48663
せっかく true, false, nil の3つの著名なリテラルがあるので三値論理、お話としては大変綺麗ですが、よく考えてみると、SQL の NULL == NULL が NULL を得るように nil == nil が nil を返すようにせよということですよね。理論上美しいのはわかるのですが、これはハマる人が多そう… ----- Original Message ----- From: "Akiduki Rindou" <rindou@gmail.com> To: "ruby mailing list" <ruby-list@ruby-lang.org> Sent: Friday, March 23, 2012 5:40 AM Subject: [ruby-list:48662] Re: == 演算子でちとはまりました > 「==」オペレータのポリシーってどうなってるんでしょうか? > > 対象の評価(つまりポインタ)ならNilが返ってくるのは > 気になったり > > 値の評価であったら、型を考える必要があるように思えます。 > 例えば、クラスAのインスタンスIA、クラスBのインスタンスIBがあるとき、 > B ⊆ A (BはAの下位クラスである)ならば値の評価ができるので、 > 返値は必ずtrueかfalseの二値が良いのではないでしょうか > > また B \not⊆ Aであったらnilを返すのが良いのでは > 等と思います。 > > 「==」を自由に定義できることを踏まえても、 > API(標準関数とクラスも含めて)二値論理か、三値論理、 > どういう観点でどちらを採用するのかなどあっても良いのかななどと。 > > そうすれば、三値論理の場合、 > nil & true == nil > なども論理的な裏付けができるかと思います。 > (今は「nil & true == false」なのですが、どうなのだろうと思ったり) > > 2012年3月22日22:43 dezawa <dezawa@aliadne.net>: >> (2012年03月22日 21:30), Yukihiro Matsumoto wrote: >>> まつもと ゆきひろです >>> >>> In message "Re: [ruby-list:48659] == 演算子でちとはまりました" >>> on Thu, 22 Mar 2012 17:23:55 +0900, dezawa<dezawa@aliadne.net> >>> writes: >>> | >>> | >>> |nil == nil # => true >>> |"123" == nil # => false >>> |Time.now == nil # => nil >>> |Time.now.to_i == nil # => false >>> | >>> |なぜ Time のときは違う結果になるのでしょうか。 >>> |仕様? BUG? >>> >>> 「等しくない時、偽(nil or false)を返す」という範囲では想定の >>> 範囲内の挙動だと思いますが。まあ、揃えたほうが色々わかりやす >>> いと思いますので、1.9ではfalseになっているわけですが。 >> >> ええ、まあ実行では問題ないのですが、 >> あとづけで test:unit していて >> で >> false を require しているtestで False してしまう、、、、、 >> == がnilを返すとは思わなくて、なぜなのか半日悩んでしまったものですから。 >> >> >