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









"Suliman" <evermind live.ru> 