From: siena@... (Siena.) Date: 2002-06-03T00:44:43+09:00 Subject: [ruby-dev:17280] Re: [ruby-list:35305] Re: ((1.2)..(3.4)).to_a Siena. です。 [ruby-dev:17273] の静的型を想定するのは Ruby 的ではない、というのを受けて。 ▼ [ruby-dev:17268] < Yukihiro Matsumoto さん 》|単に + があるだけでは駄目、というのは、succ が存在しなくて 》|+ が存在するという場合に、+ が算術的な意味で定義されてないと 》|期待するように動作しないから、という理解で良いですよね。 》|現状で、適切なルールを定めるのは困難ではないかと思います。 》 》そうですね。だから思いつかないわけですけど。 新しくなんらかの約束を設けない限り、思い付くのは無理ではないでしょうか。 # 個人的な見解は、「困難」から「無理」に変わりました ^^; メソッド名が判断の根拠にならず、+ が算術演算であるか否かなどを調べる ためのメソッドもなく、共通の上位クラス / Mixin モジュールも想定できず、 静的型を前提とした考え方も Ruby 的ではない、という現状では。 ▼ [ruby-dev:17265] < Siena. 》あるいは、算術的な意味での + ならば、__add__ というメソッドを 》定義して、alias :+ :__add__ とするように約束を設けるとか。 というのはモジュール分割ではない案ですが、まとめて却下でしょうか。 》|算術的な意味での演算であるかを確認できるようにできないでしょうか。 》| 》|とりあえず、「Numeric ならば」というのは保証にならないので、例えば 》|Arithmetic モジュールを導入し、必要に応じて include する事にして、 》|Numeric 以外でも算術を保証できるようにするとかいうのを思い付きます。 》 》「Numericならば算術+がある」のは保証できると思います。 はい。おっしゃる通りです。 意図が伝わりにくい書き方だったかもしれません。 対象としたいクラスが Numeric を継承しているものとは限らないので、 「Numeric であること」だけを対象とみなせるクラスである事の 必要十分条件とするのは適切ではない (だから、より一般的に 適用できる条件を設けてはどうか)、という事を意図していました。 # というのは伝わっている上でのご指摘と思いますが、念のため補足 ^^; 》Arithmeticモジュールの導入については、モジュールに分割してい 》くのはあんまり趣味じゃないです。それに Time が Arithmetic か 》と問われると「それは違うだろう」という気持ちになります。 この分割案も静的型を想定した話ですので、取り下げたいと思います。 Arithmetic というのは、あくまでも「例えば」ですので、 より適切なものを別途考えるというつもりでいました。 単に思い浮かばなかっただけです ^^; 》|# Numeric って、実質的には実数の部分集合だけです? 》 》ComplexもNumericのサブクラスですが。Numeric#stepの場合には あ、そうですね。忘れていました ^^; 実数あらため複素数も含めた 直感的に「数」と扱われている集合を表す事を目的としているのか、 そうではないもっと抽象的なこれこれの条件を満たす集合 (*) を 表す事を目的としているのかというのが、ちょっと気になったので。 普通に考えると前者でしょうから、一般的には、ある条件を満たす (例えば、+ が代数的な「加法」として定義されている) クラスは Numeric のサブクラスである、などの仮定はできないのだろうなあ と、上記の「Numeric ならば」云々のところで思っての疑問でした。 独り言にまで付き合ってくださってありがとうございます。 (*) 例えば、体や環、あるいはもっとくだけた条件付けでも構いません --- Siena.