basyura's blog

あしたになったらほんきだす。

特異クラス

いまいちメリットが分からないんだけど・・・こういうこと(*)できるから便利ってこと?
(*) 同一クラス名の同一メソッド名で異なる値を返すことができる

class Test
 def initialize(name)
    sing = class << self; self end
    sing.class_eval "def name; #{name.to_s.inspect}; end" 
 end
end
a = Test.new("basyuraA")
puts a.name #=> basyuraA
b = Test.new("basyuraB")
puts b.name #=> basyuraB