Robert Klemme wrote: > Class variables (the ones with @@) have some strange properties that > sometimes lead to surprising behavior. Indeed. I figured out why my code sample didn't work. Ruby considers it a "toplevel singleton method." If I define a class method inside the class definition, it works, but if I define it outside (as I did in my email), it's looks to the closest class definition outward -- in this case, the thing irb wraps my code in. This is one of those odd cases where irb acts differently from Ruby-raw, too. Also, Ruby didn't warn me about toplevel singleton access like they said it should. I noticed it does, though, if I use class << Test syntax. This make sense, now. def Test.blah is a singleton method, and Ruby doesn't know anything about class scope when it's looking at this definition, because it's treating Test like any old object on which to define a singleton method. It needs to be stuck inside a class Blah...end block to know where the class variables lie. Still icky, though. (See below for my RCR-lite.) > I generally recommend to not use them. Instance variables in classes > are much simpler to handle and much clearer and cleaner IMHO. > > Just a simple example where each new instance gets assigned a serial > number: Thanks for the example. I'm just wondering why class Foo def blah @@cnt += 1 end end couldn't have been a shortcut for [an optimization of]: class Foo class << self attr_accessor :cnt end def blah self.class.cnt += 1 end end And why instead class variables were done the way they were. And if I don't get a decent answer, I'll go complain about it in my imaginary blog! So take that, matz! Devin