Say I have a class that has a member that's simply a integer used for counting I'll have a few instances (ten or so) and they will all be counting their own little thing on Hmm if it is their own thing, it is an instance i.e. non-static variable, not a class variable. A class variable is like a global variable, except
Hi Kassen, Replying in this thread first, as I am still trying to learn enough ChucK to contribute more in our other thread about seqs and such. THis is based on my object-oriented knowledge in general and might be incorrect in the context of ChucK. You have been warned, <smile>. First of all, I think the subject is slightly ambiguous. In programming jargon it could mean one of two things: Members of a class as in the data members e.g. doing something to all data fields of a particular object or class gloablly via reflection. OR what you ment doing something to every instance of a class. that it is restricted in a class. In other words, all the count methods would modify the same variable if the variable is a static variable. This is assuming ChucK's static works like in Java, I'm not sure about that.
happens and I'd like to reset all the counters to zero after which The easiest way to do this would be to have a class method named resetCounter and calling it for each of the instances you have in a loop. Alternatively, you could keep track of all the instances in a static array in the class, and then call the reset method for all the elements in the array. But this latter thing is more complicated and might differ garbage cllection, if it is based on reference counting the objects.
thought that if I'd call a static function as a member of the class Static functions are always called on a class, not on an object. Unless you pass in the object as a parameter but that's suspicious outside of certain scripting languages whose names start with p, in which it is the right way to do it.
then this function would be executed for all instances. It can modify a variable that is common to all instances, that is they all have the same copy and refer to the same variable, but it does not automagically modify anything instance specific as it has no object to work with, only the class data that's global to all objects.
referencing non-static int member of th class inside of a static function That is because chucK does not know hwich object's variable you are accessing. THink of it like this: If you call a non-static method, the variables you are likely to deal with are particular to that instance of the class, although you can access and modify static variables that all the instances share, too. If you call a static method, you are doing something global to all instances, such as modifying a shared static variable. AS the variable is shared, you don't have to have an instance to be able to refer to it.
To illustrate further consider one of those scripting languages I hinted at, such as Perl. In Perl your class or object methods always get a first parameter, if they are called correctly. That argument is an object reference, if it is an object method. ELse it is just a class name string Which can generally only be used to refer to the variables that all instances share i.e. class variables. As an example say we have a person class with name and age as well as a static variable called headCount. Each instance of the class has its own age and its own name, but the member or datafield, if you will, headCOunt is common to all instances. Modifying the headCount, whether it is in a static method or not, wil change a single variable in the class and that change will show up everywhere in that class's methods, because it is just a single variable.
about a nullpointer exception. A semantic quibble, why is it called a null pointer if the language only supports references? I've been thinking the same about Java.
Hope this clarifies matters. IF not, I could try to demonstrate using a code sample. -- With kind regards Veli-Pekka Tätilä (vtatila@mail.student.oulu.fi) Accessibility, game music, synthesizers and programming: http://www.student.oulu.fi/~vtatila/