>
>
> 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

Reply via email to