From: matz@... (Yukihiro Matsumoto) Date: 2000-01-05T16:10:17+09:00 Subject: [ruby-list:20054] Re: == === case まつもと ゆきひろです In message "[ruby-list:20053] == === case" on 00/01/05, "Shigeo Kobayashi" writes: |1.== と ===の動作に一貫性がない? | p z = BigFloat::new(5,"3.14") | p z == 3.14   # true BigFloat#==(左辺 z 、右辺 3.14) | p 3.14 == z   # true BigFloat#==(左辺 z 、右辺 3.14) ??? | p z === 3.14 # true BigFloat#===(左辺 z 、右辺 3.14) | p 3.14 === z # false BigFloat#=== は呼ばれない | | == と === は以下のように、同様に定義しています。 | rb_define_method(gcBigFloat, "==", BigFloat_eq, 1); | rb_define_method(gcBigFloat, "===", BigFloat_eq, 1); Numeric#=== は 数値の比較をしない(からcoerceもしない)からで はないでしょうか。ですから、 case x when 3.14 ... のような操作は動作しません。これをした方が良いとするかどうか は議論の余地はあります。 |2.case 文の左辺と右辺の順序 | case z | when 3.14 |  とすると、3.14 === zのように比較されるのでBigFloat#===は呼ばれ | ません。直感では、z=== 3.14と比較されるのが自然のような気がす | るのですが? これはこういうものです。 case 2 when 1..4 のようなものを許すためです。 まつもと ゆきひろ /:|)