From: "豊福" Date: 1999-02-12T20:11:51+09:00 Subject: [ruby-dev:5057] Re: a genericity 豊福@パパイヤです。 ごとけんさん > 石塚さんが外出宣言したあとに進めるのは気がひけますが > まぁ確認なのでよいかな (^^;;; 加速かけて追いかけてきてすぐ追いぬいて行ってしまう からいいんじゃないでしょうか。:-) >> 「どのメソッドからもどのオブジェクトを対象にしても >>coerce を使ってよい」という私の考えは自分でも coerce >>の使用範囲を広げすぎかなと感じています。 > > 2項演算子に限っている場合は混乱しないと僕は思います. > もちろん,numeric**matrix などは文脈がないと一般には > 定義されませんがその場合は例外を返せばよいわけですし. 2項演算子というのは数を対象とした +,-,*,/,** だけのことですか。 あれから本来の coerce の意味をそこなわない程度の coerce の拡張を考えているのですが、prec に coerce を使う(def Float.coerce(num); num.to_f; end って やつ)のはありだという気がしてきました。理由はまだ うまく言葉にできないですが。 それと数以外を対象とする coerce を使う例を思い つきましたがこれどうですかね。ちょっと人工的で役 には立たない例ですが。 クラス A: ascii文字だけから構成される文字列の クラス クラス B: ascii文字および日本語から構成される 文字列のクラス クラス C: ascii文字および日本語からなる文字列を 文字列長と先頭3文字の情報だけに制限 したクラス インスタンスの例 クラス A: "a??b??c" クラス B: "aあbいc" クラス C: 先頭 "aあb"、長さ 7バイト Integer < Rational < Float がここでの A < B < C というイメージです。 この A,B,C と文字列連結演算「+」に関して coerce を使うのは本来の coerce の使い方の範囲内ではない でしょうか。(prec も定義できそうでしょ) > 少なくとも Integer と Float の比較という話でしたら, > 単に,実数の2進展開列を何ビット表現できるかにおいて > > Integer Float > 小数点の左側 非有界 > 有界 > 小数点の右側 有界(零) < 有界 > > のように小数点の左右で大小関係が逆転していることが > 僕が両者の精度が比較不能と主張する根拠です. > > 代表元説も商集合を生成するための同値関係が「近似値を得る > という写像」で決まることを考えると,やっぱり精度に帰着 > される問題と思います. かたや加減的に決まる精度、かたや乗除的に決まる 精度で、比較できないということですよね。 --- 豊福@パパイヤ unbound@papaya.juice.or.jp toyofuku@juice.or.jp