Initialising global associative array

Paul via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jun 6 13:30:49 PDT 2015


On Saturday, 6 June 2015 at 19:07:58 UTC, Jonathan M Davis wrote:
> On Saturday, June 06, 2015 18:18:07 Paul via 
> Digitalmars-d-learn wrote:
>> I need a globally accessible AA of type string[string] and find
>> that it won't compile unless I use the static this(){} method 
>> as
>> described in this thread:
>>
>> http://forum.dlang.org/thread/owhfdwrpfuiehzpiuqux@forum.dlang.org#post-mailman.1522.1346449072.31962.digitalmars-d-learn:40puremagic.com
>>
>> I understand the concept of this() insofar as returning a
>> reference to an object but what is 'this' in the context 
>> referred
>> to? A reference to the module??
>>
>> It doesn't seem very intuitive (to me at least!) especially 
>> given
>> that strings are immutable anyway.
>
> It's talking about static constructors, which are functions 
> that run before
> main rather than being constructors which are tied to specific 
> objects. If
> you search for "static constructor" on this page, you'll find 
> some
> documentation on them:
>
> http://dlang.org/class.html
>
> Another place to read up on them would be Ali's book:
>
> http://ddili.org/ders/d.en/modules.html
>
> - Jonathan M Davis

Thanks both, that makes sense.

However, I now get an 'undefined identifier' error when compiling 
and trying to access the AA from a function within the same 
module.

static this()
{
   string[string] tagWords = [ 	"DIST" : "Distance", .....
}

...

   if(tag in tagWords)
   {
     retVal.tag = tagWords[tag]; <---- 'Error: undefined 
identifier tagWords'
     ...

According to Ali's book that looks like a linker message but I am 
compiling like so:

dmd -w oftest *.d

Do I need to qualify the name in some way or give DMD some more 
info?






More information about the Digitalmars-d-learn mailing list