On Thu, 1 Jun 2006 04:18:18 +0900, Wes Gamble <weyus / att.net> wrote: > I just ran into a seemingly weird problem until I discovered that the > method that I kept trying to call as an instance method was in fact a > class method. But of course, there isn't anything in the signature to > indicate that to me. Apparently, if you do this: > > class << self > def x > end > end > > then x is a class method, not an instance method. There are several different pieces which fit together: 1. Classes are themselves represented as objects. class Foo # ... end p Foo.class # => Class 2. Methods can be defined on a per-object basis foo = Object.new def foo.blah puts "eek" end foo.blah # => eek 3. you can also define per-object methods this way: foo = Object.new class << foo def blah puts "eek" end end foo.blah # => eek 4. outside of methods, within a class ... end block, self refers to the class class Foo p self # => Foo end 5. "class methods" are simply per-object methods defined on classes class Foo class << self def blah puts "eek" end end end Foo.blah # => eek -mental