クラス定義の中は新しいフレーム、別の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

ふうん。