[chuck-users] Doing something to all members of a class?
Spencer Salazar
ssalazar at CS.Princeton.EDU
Wed Mar 14 00:57:57 EDT 2007
Scott/David/all,
On Mar 13, 2007, at 9:49 PM, Scott Wheeler wrote:
> The only way I saw to work around this was creating another class
> as an array handle and using that by reference.
Another potential workaround for this bug would be to declare an
empty array, which allocates no memory for array elements, is "sort
of" like an array reference, and manages to get around the static
data member bug. You can then to chuck a new array to it to
initialize it. E.g.,
int values[20] @=> Foo.values;
class Foo
{
static int values[];
// ...
}
One technique I like is to initialize static class data at the
beginning of the file containing the class definition. The
advantages of this approach are that the initialization is guaranteed
to be executed only once, is guaranteed to be executed if no fatal
errors occur during the initialization, is executed before anything
else can use it (though Im not positive this is guaranteed), and
doesn't require an instance of the class to have already been
created. If the class definition is at the top of the file, it
sometimes makes sense to put the initialization code immediately
after the class definition, which is functionally the same but might
read a little better.
> And unlike other objects, it seems that you can't assign an array
> to an Object. (i.e. "new int[20] @=> Object foo;" doesn't work)
This now works as of the current release candidate! However, I dont
think there is a way to get the array data out of an object stored in
an Object reference (foo $ int[] doesn't work).
spencer
More information about the chuck-users
mailing list