On 05/10/2010 13:05, Denis Koroskin wrote: > On Tue, 05 Oct 2010 15:53:55 +0400, Denis Koroskin <2kor...@gmail.com> > wrote: > >> On Tue, 05 Oct 2010 15:40:39 +0400, Bob Cowdery >> <b...@bobcowdery.plus.com> wrote: >> >>> On 05/10/2010 12:13, Denis Koroskin wrote: >>>> On Tue, 05 Oct 2010 15:08:39 +0400, Bob Cowdery >>>> <b...@bobcowdery.plus.com> wrote: >>>> >>>>> On 05/10/2010 12:04, Denis Koroskin wrote: >>>>>> On Tue, 05 Oct 2010 14:57:22 +0400, Bob Cowdery >>>>>> <b...@bobcowdery.plus.com> wrote: >>>>>> >>>>>>> On 05/10/2010 11:45, Denis Koroskin wrote: >>>>>>>> On Tue, 05 Oct 2010 14:23:47 +0400, Bob Cowdery >>>>>>>> <b...@bobcowdery.plus.com> wrote: >>>>>>>> >>>>>>>>> I can't seem to get any sense out of associative arrays. Even >>>>>>>>> the >>>>>>>>> simplest definition won't compile so I must be doing something >>>>>>>>> daft. >>>>>>>>> >>>>>>>>> int[string] aa = ["hello":42]; >>>>>>>>> >>>>>>>>> Error: non-constant expression ["hello":42] >>>>>>>>> >>>>>>>>> What exactly is not constant about this. The example is straight >>>>>>>>> out the >>>>>>>>> book. Using D 2.0. >>>>>>>>> >>>>>>>>> bob >>>>>>>> >>>>>>>> What exactly compiler version are you using (run dmd with no >>>>>>>> args)? >>>>>>>> Works perfectly fine here (dmd2.049). >>>>>>> >>>>>>> It says 2.049. How odd. I've got a fair amount of code and >>>>>>> everything >>>>>>> else compiles fine. >>>>>> >>>>>> Can you please post complete code snippet that fails to compile? >>>>>> >>>>>> Here is the code I used to test: >>>>>> >>>>>> module aa; >>>>>> >>>>>> import std.stdio; >>>>>> >>>>>> void main() >>>>>> { >>>>>> int[string] aa = ["hello":42]; >>>>>> writeln(aa["hello"]); >>>>>> } >>>>>> >>>>>> # dmd -run aa.d >>>>> >>>>> Ah! It's some other code below it that is not giving an error but >>>>> causing the error above. So the compiler is getting confused. What >>>>> I was >>>>> actually trying to do was create an associative array with a >>>>> string as a >>>>> key and a Tuple as the value. Now >>>>> >>>>> auto aa = [ >>>>> "some string": (100.0, 6100.0) >>>>> ] >>>>> >>>>> compiles but is clearly wrong and gives rise to other errors. Does >>>>> anyone know the correct way to define this and then access the tuple. >>>> >>>> import std.stdio; >>>> import std.typecons; >>>> >>>> void main() >>>> { >>>> auto aa = ["hello": tuple(100.0, 6100.0)]; >>>> auto result = aa["hello"]; >>>> >>>> writeln(result.field[0], " ", result._1); // primary and >>>> alternative way >>>> } >>> >>> Thanks. I've established that works for me and also that the actual >>> array I'm using also works in the test program but it won't compile in >>> the real program. I've commented everything else out of the file and >>> just left... >>> >>> import std.typecons; >>> >>> auto A_RX_FILT = [ >>> "6K0": tuple(100.0, 6100.0), >>> "2K4": tuple(300.0, 2700.0), >>> "2K1": tuple(300.0, 2400.0), >>> "1K0": tuple(300.0, 1300.0), >>> "500": tuple(500.0, 1000.0), >>> "250": tuple(600.0, 850.0), >>> "100": tuple(700.0, 800.0) >>> ]; >>> >> >> You are trying to declare global variable and initialize at in >> compile time. As far as I know, you can't initialize AA at compile >> time atm (this might be implemented in future though). >> >> As such, I'd recommend against using global variables (try moving it >> to some class or something). Anyway, you need to initialize it at >> some point, either manually: >> >> Tuple!(double,double)[string] A_RX_FILT; >> >> void init() >> { >> A_RX_FILT = [ >> "6K0": tuple(100.0, 6100.0), >> "2K4": tuple(300.0, 2700.0), >> "2K1": tuple(300.0, 2400.0), >> "1K0": tuple(300.0, 1300.0), >> "500": tuple(500.0, 1000.0), >> "250": tuple(600.0, 850.0), >> "100": tuple(700.0, 800.0) >> ]; >> } >> >> or automatically at thread startup: >> >> static this() >> { >> init(); >> } >> >> Hope that helps. > > See my other reply for a better solution.
Thanks very much. It compiles now. The reason I thought it was an issue was because sometime it did compile a global associative array. I need to do some homework on what 'this' does. It's clearly a powerful concept and has wider application than class constructors.