>>>>> "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