Re: [Vala] Vala-list Digest, Vol 26, Issue 8
- From: Ali Sabil <ali sabil gmail com>
- To: golnaz nilieh <g382nilieh gmail com>
- Cc: vala-list gnome org
- Subject: Re: [Vala] Vala-list Digest, Vol 26, Issue 8
- Date: Wed, 6 Jan 2010 10:56:39 +0100
On Wed, Jan 6, 2010 at 10:20 AM, golnaz nilieh <g382nilieh gmail com> wrote:
On Wed, Jan 6, 2010 at 7:28 AM, Jan Hudec <bulb 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.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]