[ruby-list:48662] Re: == 演算子でちとはまりました

From: Akiduki Rindou <rindou@...>
Date: 2012-03-22 20:40:09 UTC
List: ruby-list #48662
「==」オペレータのポリシーってどうなってるんでしょうか?

対象の評価(つまりポインタ)なら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を返すとは思わなくて、なぜなのか半日悩んでしまったものですから。
>
>

In This Thread