クラスとインスタンスの境界が曖昧 from バカが征く

Class#inherited なんて使ったことねーよ! ってことで使ってみた。

#!/usr/bin/env ruby

class PosixParam
   @@classes = []

   def initialize param_name
      @param_name = param_name
   end

   def self.instance(param_name)
      return choice_class(param_name).new(param_name)
   end

   def self.choice_class(param_name)
      return @@classes.find{|ech| ech.param_regexp =~ param_name}
   end

   def self.inherited(subclass)
      @@classes << subclass
   end
end

class SysconfParam < PosixParam
   def self.param_regexp
      return /^_SC/
   end
end

class PathconfParam < PosixParam
   def self.param_regexp
      return /^_PC/
   end
end

class ConfstrParam < PosixParam
   def self.param_regexp
      return /^_CS/
   end
end


if __FILE__ == $0
   p PosixParam.instance("_SC_FOO")
   p PosixParam.instance("_PC_BAR")
   p PosixParam.instance("_CS_BAZ")
end

ほーぅ、キモイ!(もちろん褒め言葉)。やっぱ手を動かさないと実感できないなー。メタプログラミング関係をどうにかしなきゃ、と思っているのだが腰が重い。