digitalmars.D.learn - Global variables read at compile time?
- Stefan (13/13) Aug 15 2012 Hi there, I'm having trouble getting the following code to
- RommelVR (2/15) Aug 15 2012 Make a an enum, const or otherwise immutable.
- d_follower (2/3) Aug 15 2012 I don't think you understood the question.
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (12/15) Aug 15 2012 I thought RommelVR did understand the question. Try this:
- Suliman (7/7) May 06 2014 I have got same error. I need to pass in instance of class
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (14/16) May 06 2014 There is module 'static this()' for such runtime initialization:
- Suliman (2/2) May 06 2014 Thanks! But is there any other solution? I am thinking that I am
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (10/12) May 06 2014 Sorry, I don't understand what exactly you are trying to do. :( Is
- Suliman (2/2) May 06 2014 I am tying to hardcode name of config file name. Then I would
- d_follower (17/30) Aug 15 2012 You must understand that your problem lies in line 4, not in line
- Andrej Mitrovic (4/6) Aug 15 2012 That's what the static constructor is for:
- Leandro Motta Barros (16/50) Aug 15 2012 Another option is to use "module constructors", as shown below. (But
- Jesse Phillips (8/21) Aug 15 2012 untested
- Justin Whear (14/29) Aug 15 2012 D is not as context-sensitive as what you may be used to. This is a
Hi there, I'm having trouble getting the following code to compile: import std.stdio; string a = "a"; string b = a; void main() { writeln(b); } DMD spits out the error "test.d(4): Error: variable a cannot be read at compile time". Is there any way to tell the compiler I want b evaluated at runtime, or am I missing something obvious here?
Aug 15 2012
On Wednesday, 15 August 2012 at 13:36:26 UTC, Stefan wrote:Hi there, I'm having trouble getting the following code to compile: import std.stdio; string a = "a"; string b = a; void main() { writeln(b); } DMD spits out the error "test.d(4): Error: variable a cannot be read at compile time". Is there any way to tell the compiler I want b evaluated at runtime, or am I missing something obvious here?Make a an enum, const or otherwise immutable.
Aug 15 2012
On Wednesday, 15 August 2012 at 13:41:10 UTC, RommelVR wrote:Make a an enum, const or otherwise immutable.I don't think you understood the question.
Aug 15 2012
On 08/15/2012 06:55 AM, d_follower wrote:On Wednesday, 15 August 2012 at 13:41:10 UTC, RommelVR wrote:I thought RommelVR did understand the question. Try this: import std.stdio; enum a = "a"; string b = a; void main() { writeln(b); } Ali -- D Programming Language Tutorial: http://ddili.org/ders/d.en/index.htmlMake a an enum, const or otherwise immutable.I don't think you understood the question.
Aug 15 2012
I have got same error. I need to pass in instance of class constant, but got error "Error: static variable cannot be read at compile" http://www.everfall.com/paste/id.php?1mc9mb9cxyie When I had create instance of class in main, and create confvarible above it all worked, but when I had moved it's in module I got error.
May 06 2014
On 05/06/2014 03:16 AM, Suliman wrote:When I had create instance of class in main, and create confvarible above it all worked, but when I had moved it's in module I got error.There is module 'static this()' for such runtime initialization: Config config; static this() { config = new Config(confname); if (config.isconfigexists()) writeln("config exist"); else writeln("config do not exists"); } void main() {} Ali
May 06 2014
Thanks! But is there any other solution? I am thinking that I am trying to specify config name by wrong way...
May 06 2014
On 05/06/2014 07:40 AM, Suliman wrote:Thanks! But is there any other solution? I am thinking that I am trying to specify config name by wrong way...Sorry, I don't understand what exactly you are trying to do. :( Is config file a compile-time concept? Do you want to read it at compile time? You can also include the contents of a file at compile-time: import ("somefile.d") The compiler will read the file and insert its contents where the import statement appears. On the other hand, if it is available only at run-time, you obviously have to read it at run time. Ali
May 06 2014
I am tying to hardcode name of config file name. Then I would read and parse it.
May 06 2014
On Wednesday, 15 August 2012 at 13:36:26 UTC, Stefan wrote:Hi there, I'm having trouble getting the following code to compile: import std.stdio; string a = "a"; string b = a; // line 4 void main() { writeln(b); // line 8 } DMD spits out the error "test.d(4): Error: variable a cannot be read at compile time". Is there any way to tell the compiler I want b evaluated at runtime, or am I missing something obvious here?You must understand that your problem lies in line 4, not in line 8, i.e. the following doesn't work either: string a = "a"; string b = a; I don't really know why, but it seems that you can only initialize globals with constants. What you could do is something like this (I guess): enum value = "a"; string a = value; string b = value; void main() { writeln(b); b = "b"; writeln(b); }
Aug 15 2012
On 8/15/12, d_follower <d_follower fakemail.com> wrote:I don't really know why, but it seems that you can only initialize globals with constants.That's what the static constructor is for: http://dlang.org/class.html#StaticConstructor http://dlang.org/class.html#SharedStaticConstructor
Aug 15 2012
Another option is to use "module constructors", as shown below. (But somehow this all looks a bit fishy for me...) LMB ---- import std.stdio; string a = "a"; string b; static this() { b = a; } void main() { writeln(b); } On Wed, Aug 15, 2012 at 11:03 AM, d_follower <d_follower fakemail.com> wrote:On Wednesday, 15 August 2012 at 13:36:26 UTC, Stefan wrote:Hi there, I'm having trouble getting the following code to compile: import std.stdio; string a = "a"; string b = a; // line 4 void main() { writeln(b); // line 8 } DMD spits out the error "test.d(4): Error: variable a cannot be read at compile time". Is there any way to tell the compiler I want b evaluated at runtime, or am I missing something obvious here?You must understand that your problem lies in line 4, not in line 8, i.e. the following doesn't work either: string a = "a"; string b = a; I don't really know why, but it seems that you can only initialize globals with constants. What you could do is something like this (I guess): enum value = "a"; string a = value; string b = value; void main() { writeln(b); b = "b"; writeln(b); }
Aug 15 2012
On Wednesday, 15 August 2012 at 13:36:26 UTC, Stefan wrote:Hi there, I'm having trouble getting the following code to compile: import std.stdio; string a = "a"; string b = a; void main() { writeln(b); } DMD spits out the error "test.d(4): Error: variable a cannot be read at compile time". Is there any way to tell the compiler I want b evaluated at runtime, or am I missing something obvious here?untested string a = "a"; static this() { string b = a; } be aware of the details: http://dlang.org/module.html#staticorder
Aug 15 2012
On Wed, 15 Aug 2012 15:36:24 +0200, Stefan wrote:Hi there, I'm having trouble getting the following code to compile: import std.stdio; string a = "a"; string b = a; void main() { writeln(b); } DMD spits out the error "test.d(4): Error: variable a cannot be read at compile time". Is there any way to tell the compiler I want b evaluated at runtime, or am I missing something obvious here?D is not as context-sensitive as what you may be used to. This is a feature to make the language more parseable and human-grokable. Basically, the result of a module-level assignment should not depend on what came before, so this example code is invalid: string a = "a"; a = "b"; string b = a; This would require the declaration of b to depend on the order of the declarations/statements which come before it. When you add in the import of modules, things would get really hairy really fast. So module-level declarations must use constant expressions (literals or symbols to constant data) in their initialization. Justin
Aug 15 2012