From: ttate@... Date: 1998-12-09T02:06:58+09:00 Subject: [ruby-dev:3776] Re: constants (or class vriable?) 立石です。 From: matz@netlab.co.jp (Yukihiro Matsumoto) matz> |* MLのようなFunctor Rubyで考えているのはmodule -> moduleを行なう機構です。 たとえば、SortedListというfunctorの例だと ML(Standard ML/NJ)では signature ORDERED type elem val eq : elem * elem -> bool val lt : elem * elem -> bool end structure Integer : ORDERED = struct type elem = int fun eq(x,y) = (x = y) fun lt(x,y) = (x < y) end signature SORTED_LIST type elem type slist val create : slist val cons : elem * slist -> slist end functor SortedList(base : ORDERED) : SORTED_LIST type elem = base.elem type slist = elem list fun create = [] : slist fun cons(x,Y as (y::ys)) = if base.lt(x,y) then x::Y else y::(cons(x,ys)) | cons(x,[]) = [x] end のように定義できて、 SortedArray(Integer)で、 struct type elem = int type sarray = int list fun create = [] : sarray fun cons(x,Y as (y::ys)) = if x < y then x::Y else y::(cons(x,ys)) | cons(x,[]) = [x] end 相当のストラクチャ(MLではこう呼ぶ)が作れるわけです。 ;; ようするに構造を構造にマッピングする写像、、、、 MLのストラクチャをRubyのmoduleと見てmoduleからmodule へマッピングするようなものがあるといいかもというのが 僕のもともとの考えですが、いまいちクラスとの関係を 考えると考えが漠然としてまとまりがないのでずっと置 いといたのですが、、、、 matz> |* Abstractなclass で、こっちがJavaでいうところのabstract,interface、 C++の仮想クラスを考えています。 ;; interfaceはちょっと違うかもしれませんが、、、 単にインスタンスを作れないのではなくて、あるメソッド が定義されていることを保証したいという思いからでてきました。 matz> すいません,それらがどのようなものかもうちょっと説明していた matz> だけませんか? ;; こんなんでいいですか? とりあえず、両方とも「あるといいかも」という程度で、他にそん なことを考えたことがある人がいればと思い話題に出しました。 Takaaki Tateishi