クラス定義の中は新しいフレーム、別のself
Rubyのクラス定義の中は新しいフレーム。
x = 123 p x #=> 123 class Rubyco p x #=> undefined local variable or method `x' for Rubyco:Class (NameError) end
x = 123 p x #=> 123 class Rubyco x = 456 p x #=> 456 end p x #=> 123
Rubyのクラス定義の中は別のself(そのクラス)。
p self #=> main class Rubyco p self #=> Rubyco end
ええと…。
def define_class(klassname) zelf = Class.new eval "#{klassname} = zelf" end define_class('Rubyco') p Rubyco #=> Rubyco p Rubyco.class #=> Class
ふうん。