On 24 Nov 2009, at 23:09, Kassen wrote:
For some reason, 'chuck' does not instantiate class static constants until there has been an instantiation of the class itself.
Writing the value to the variable is deemed part of the constructor instead of the instantiation. You could get around this using a static member function to set all such values, that way you could have static members set to default values without a class instance.
I'm not completely happy with the current behaviour as two elements of a single line are treated in very different ways without this being intuitively clear. Of course it could be argued that if this bothers us we simply shouldn't do it.
That is my worry, too: lack of intuition. It invites errors. I wrote code: class A { ... static fun float getr() { return Math.pow(2, l_); } ... } This typically causes log(2) to be re-evaluated each time pow(2, l_) is computed, assuming that it calls the C pow(). So then introduce a value for the constant log(2): class A { ... Math.log(2) => static float log2_; static fun float getr() { return Math.exp(l_*log2_); } ... } In C++ this is OK. However, in 'chuck', I have to add unrelated code: A a; otherwise the function getr() will not work. Or take the definition of log2_ it out of the class A, in which case its name is littering the global namespace. Hans