>>>>> "D" == Devin Mullins <twifkak / comcast.net> writes: D> Flagellate = Class.new { D> def banana_boat; puts 'hurrah!' end D> } With this you have this case >> >> * in the class A, it has : self = A, ruby_class = A >> This mean that you have self = ruby_class = Flagellate D> However: D> class FranklinRoosevelt D> def smooth_operator; def banana_boat; puts 'javohl!' end end D> end D> FranklinRoosevelt.new.smooth_operator D> makes banana_boat a method on FranklinRoosevelt, which is either D> ruby_class or self.class, but not self. When the method #smoot_operator is called * self is an instance of FranklinRoosevelt * ruby_class is FranklinRoosevelt #banana_boot become a method on FranklinRoosevelt D> What's goin' on? Is there another internal variable that determines D> where methods go, or am I confusing things? You are confusing : the problem is that you can't access the variable ruby_class, it's completely hidden but ruby always use this variable to know where it must store a method. D> Are Class.new and class_eval just the exception to the rule that method D> definitions go on ruby_class? If so, how? No, they are not exceptions. This is just that when you write Flagellate = Class.new { def banana_boat; puts 'hurrah!' end } many persons will except that ruby will do the same that if you write class Flagellate def banana_boat; puts 'hurrah!' end end This is why it define self = ruby_class = Flagellate Guy Decoux