From: Shigeo Kobayashi Date: 2000-01-05T15:22:13+09:00 Subject: [ruby-list:20053] == === case 小林です。 '===' を忘れたので、作成している途中で、自分にはよくわからない 動作になってしまいました。どなたか、説明していただければ助かり ます。 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); 2.case 文の左辺と右辺の順序 case z when 3.14   とすると、3.14 === zのように比較されるのでBigFloat#===は呼ばれ ません。直感では、z=== 3.14と比較されるのが自然のような気がす るのですが? # case 3.14 # when z # とは、書きにくい...   z=== 3.14とできれば、BigFloat#===内で3.14を適当に変換して比較 できます。   従って、以下のようなことができるのですが... case z when 3.14,"3.14" z=== 3.14として比較すると何か不都合でもあるのでしょうか?   (不都合がなければ、そうしていただけるといいのですが) 小林 茂雄 E-Mail: shigeo@tinyforest.gr.jp WWW: http://www.tinyforest.gr.jp