Yehuda Katz wrote an article about self and metaclass . In the article he said that Person.instance_eval assigns Person's metaclass to self for a class Person . But this is obviously wrong. class Person; end Person.instance_eval{ p self } #=> Person As I mentioned in an old article , though I'm sorry about it is written in Japanese, Ruby always has three implicit contexts: self), so called klass'