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