原です。

In message "[ruby-list:18566] Re: paramclass"
    on 99/11/13, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:
|
|ごとけんです

|>   Bar = Foo(101, "baz")
|>   bar1 = Bar.new
|>   bar2 = Bar.new

|>とすればいいだけのことではないですか?もともとの姿からは少しずれる

|名前をつけるのがめんどくさいというのも作った理由だったりしま
|す。たとえばこういう用途を考えてます。
|
|Array_of(String)
|BoundedInteger(2**24)
|CommandProcess("ping")
|MultiDimentionalArray(1024,1024,2)

なるほど、すると a == b ならば Pclass(a) == Pclass(b) であってほしい訳ですね。


|>(話変わって)include されて時ではなく、extend された時呼ばれるメソッド
|>があると面白いと思うのだけど、どうかな。特異クラスがむき出しになるけど。
|
|それ自体は面白いんですけど、どんな用法がありますか??

単に append_features の「特異」版として考えたのです。include する所を
extend したらどうなるかなあと。でも extend_object を「特異的に使えば
いい」のだと気づきました。(^^;

こんな感じで。

-------^ cparam.rb
module ClassParameterizer
  Parameters = {}
  def Parameters.[](x)
    klass, = x
    unless r = super
      r = self[x] = Class.new(klass)
      r.module_eval do
	include Default
	extend Default
      end
    end
    r
  end

  module Default
    def default_parameters
      Parameters.index(is_a?(Class) ? self : type)[1..-1]
    end
  end

  def self.extend_object(klass)
    super
    cn = klass.name
    eval "def #{cn}(*args); ClassParameterizer::Parameters[[#{cn}]+args] end",
      TOPLEVEL_BINDING
  end
end

### test
class Foo
end
Foo.extend ClassParameterizer
foo = Foo(0, "1").new

p Foo(0, "1").id == Foo(0, "1").id #=> true
p foo.is_a? Foo(0, "1")            #=> ture
p foo.is_a? Foo                    #=> true
p foo.default_parameters           #=> [0, "1"]
p Foo(0, "1").default_parameters   #=> [0, "1"]
-------$ cparam.rb