On Wed, Jan 6, 2010 at 7:28 AM, Jan Hudec <[email protected]> wrote:
>
>
> On Tue, January 5, 2010 13:12, Frederik wrote:
>> Non-value-type static class variables are only initialized after the
>> class was instantiated at least once. This behaviour is a little bit
>> counter-intuitive, and I hope it will change in the future.
>
> I have to disappoint you -- that behaviour can't change.
>
> The problem is, that the while the mechanism for static constructors
> exists for C++, there does not seem to be a portable way to use it from
> C (in gcc you can use the __attribute__((constructor)), but that's an
> extension).
>
>> You have several options:
>>
>> - create a throw-away instance:
>>
>>   static int main (string[] args) {
>>       new Global ();
>>       stdout.printf ("all data is in: " + Global.dataDir);
>>       return 0;
>>   }
>
> Actually, there is no need to do that -- calling typeof(Global); is enough.
>
>> - call a static initialization method:
>>
>>   static int main (string[] args) {
>>       Global.init ();
>>       stdout.printf ("all data is in: " + Global.dataDir);
>>       return 0;
>>   }
>
> This should not work. *static* methods do not cause a class to be
> initialized (*class* methods do, though).
>
>> - make 'dataDir' const, if it is not intended to change
>
> - make the variable a class one instead of static one.
>
> public class Global {
>    class string dataDir = "whatever";
> }
>

To me to correct way is to use:
    public static const string dataDir = "/usr/local/share/";
instead of:
    public static string dataDir = "/usr/local/share/";

Also please follow the Vala coding conventions (data_dir instead of dataDir)

--
Ali
_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to