Hi -- On Wed, 15 Mar 2006, Nathan Olberding wrote: > I've got a class. I want some methods of this class to be able to edit > some data that's "global" within any given instance of this class. For > example: > > class Person > > @name > > def changeName(newName) > @name = newName > end > > def sayName() > puts "My name is " + @name > end > end > > It seems that @name reverts back once I leave the scope of any method > that manipulates it. As you've learned from some of the other responses, @name is an instance variable. Each instance variable belongs to one object. You can always tell *which* object: it's whatever the default object (self) is, at the point where the "@var" is executed. Note that self changes between a class definition and an instance method definition: class Person puts self def some_method puts self end end Person.new.some_method This code will give you: Person #<Person:0x352814> In the top level of the class definition, self is the actual class object (Person), but inside an instance method, it's the instance (indicated by the #<Person...> expression). So... @name in the outer scope is actually an instance variable belonging to the class object, while inside any instance method, @name is an instance variable belonging to the instance. The two @name's have no connection to each other at all. You can use class variables to get a variable that can be seen in both scopes, but if you've got a property like "name" and you find yourself manipulating it outside of any instance method, something's probably in need of tweaking in the program design (since the name of any particular instance shouldn't be of concern at the class level). David -- David A. Black (dblack / wobblini.net) Ruby Power and Light, LLC (http://www.rubypowerandlight.com) "Ruby for Rails" chapters now available from Manning Early Access Program! http://www.manning.com/books/black