On Wed, Jan 6, 2010 at 10:20 AM, golnaz nilieh <g382nil...@gmail.com> wrote:
>>
>> 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.

If you define dataDir as constant you don't need the constructor and
you don't need to call it.

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

I already posted a message about that in this mailing list, but it
seems like you are subscribing to a mail digest, it will take a while
before you get it.
_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to