> > > On Wed, Jan 6, 2010 at 7:28 AM, Jan Hudec <b...@ucw.cz> 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 >
Thanks to all. I defined an empty constructor for Global, and called it in main function. also I changed dataDir to a constant variable. But a new question: Is there a way to pass the installation path to dataDir? I use this macro in configure.ac: AC_PREFIX_DEFAULT(/usr/local) can i use it as a variable in a vala source file?
_______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list