Class variables (cvars), are non-method items that permanently belong to the class in which they are defined. One can think of a class variable as named data associated with the class. There is only ever one copy of the variable. All instances of that class share that copy. All derived classes and all the instances of the derived classes share that one copy. It is like a global variable.
Gamma has the ability to add cvars to a class at any time, using the function
class_add_cvar.
Once a class variable has been added to a class it becomes available to all new
instances of that class and the derived classes. However they do not get a
private copy of that variable but share one and the same variable that belongs
to the class. As an example consider the Catalog class
and its derived class, Book, once more.
Gamma>class_add_cvar(Catalog,#capacity, 200);200Gamma>Catalog;(defclass Catalog nil [ ... (capacity . 200)][data start_date])Gamma>Book;(defclass Book Catalog [...][data (size . 0) start_date]Gamma>history = new(Book);{Book (data) (size . 0) (start_date)}
We can see that the derived class Book does not have a
private copy of the class variable capacity. However this
variable is available for the derived class as well as for
the instances of that class:
Gamma>Book.capacity;200Gamma>history.capacity;200
To set or query the value of a cvar use the class name (or the instance name)
and the cvar in dot notation. Remember, though, a change to the cvar in any
class or instance of Catalog will change it for all
classes and instances of Catalog.
Gamma>Book.capacity = 300;300Gamma>history.capacity;300Gamma>history.capacity = 400;400Gamma>Book.capacity;400Gamma>Catalog.capacity;400Gamma>