From: Shin-ichiro Hara Date: 1998-12-09T03:42:24+09:00 Subject: [ruby-dev:3781] Re: functor? (Re: constants (or class vriable?)) 原です。 > module IntStriction > def self.member?(it) > it.kind_of? Integer > end > end > > IntArray = StrictArray(IntStriction) > > a = IntArray.new > a.push 1 > a.push "hoge" # => error! functor という言葉のイメージからいうと module -> module とか class -> class という感じですね。だとすると IntArray = StrictArray(IntStriction) というよりも IntArray = IntStriction(Array) という IntStriction() ができればいいのかな?いや、違うか。 任意の Array のオブジェクト a に対して IntStriction(a) と いう IntArray オブジェクトが定義できればいいのかな。で、 InitStriction(a.foo) = InitStrinction(a).foo を要求するとか。 > のようにして用途に合わせてパラメタライズされたクラスなどを生成して使う > とか(Caml では module -> module ですが)。ユーザから見ると、 Array を > delegate してメソッドを書換えるよりも簡単に見えるのが利点でしょうか。 パラメータのあるモジュールというのは欲しいと思いますね。例えば Enumerable は each に対して作られているから、Enumerable(:each) なわけで、:each の部分を取り替えれば他のモジュールになるとかね。 include されたときに呼ばれるメソッドがあるといいという話も 前にありました。