Re: Static Associative Array
On 3/7/11, Jonathan M Davis wrote: > On Sunday 06 March 2011 18:33:04 Andrej Mitrovic wrote: >> On 3/7/11, Jonathan M Davis wrote: >> >> >> Kidding, just kidding.. > > That _did_ seem like a rather rude post for you... > > - Jonathan M Davis > Don't worry, I'd never be rude to my fellow D programmers out of the blue. Maybe that post was a semi-rant, but only half-serious. :) Anyway there's a nice SO post on enums here: http://stackoverflow.com/questions/4790652/enum-vs-immutable-in-d/4793684#4793684
Re: Static Associative Array
On 03/07/2011 03:22 AM, Peter Lundgren wrote: == Quote from Jonathan M Davis (jmdavisp...@gmx.com)'s article On Sunday 06 March 2011 14:05:04 Peter Lundgren wrote: Can you define an associative array in a way that can be evaluated at compile time like you can with non-associative arrays? I'm pretty sure not. I think that it's currently suffering the same fate as stuff like classes and is not yet able to be CTFEed. Some day... - Jonathan M Davis If not, then what is the D way to initialize a static field of a struct or class a la Java's static initializer blocks? I don't mind constructing the associative array at run-time if I have to, but I can't afford to do it more than the once needed. Use the module's clause: int[string] aa; static this () { aa = ["a":1, "b":2, "c":3]; } unittest { foreach (k,v ; aa) writefln("%s --> %s", k,v); } Note: you can have as many such ckauses as you like. Denis -- _ vita es estrany spir.wikidot.com
Re: Static Associative Array
On Sunday 06 March 2011 18:33:04 Andrej Mitrovic wrote: > On 3/7/11, Jonathan M Davis wrote: > > > Kidding, just kidding.. That _did_ seem like a rather rude post for you... - Jonathan M Davis
Re: Static Associative Array
On 3/7/11, Jonathan M Davis wrote: > Kidding, just kidding..
Re: Static Associative Array
Peter Lundgren: > If not, then what is the D way to initialize a static field of a struct or > class a > la Java's static initializer blocks? I don't mind constructing the associative > array at run-time if I have to, but I can't afford to do it more than the > once needed. Is this good enough? struct Foo { static int[int] aa; static this() { aa[0] = 1; } } void main() { assert(Foo.aa[0] == 1); } Bye, bearophile
Re: Static Associative Array
On Sunday 06 March 2011 18:22:52 Peter Lundgren wrote: > == Quote from Jonathan M Davis (jmdavisp...@gmx.com)'s article > > > On Sunday 06 March 2011 14:05:04 Peter Lundgren wrote: > > > Can you define an associative array in a way that can be evaluated at > > > compile time like you can with non-associative arrays? > > > > I'm pretty sure not. I think that it's currently suffering the same fate > > as stuff like classes and is not yet able to be CTFEed. Some day... > > - Jonathan M Davis > > If not, then what is the D way to initialize a static field of a struct or > class a la Java's static initializer blocks? I don't mind constructing the > associative array at run-time if I have to, but I can't afford to do it > more than the once needed. If you can initialize a field with CTFE, then you can do it directly. Otherwise, you have to do it with a constructor at runtime. If it's a member field of a struct or class, then you use a normal constructor. class C { this() { ... } } If it's a static field of a struct or class, then you use a static constructor in that struct or class. class C { static this() { ... } } If it's a variable at the module level, then you use a module constructor (also labeled with static). static this() { ... } - Jonathan M Davis
Re: Static Associative Array
== Quote from Jonathan M Davis (jmdavisp...@gmx.com)'s article > On Sunday 06 March 2011 14:05:04 Peter Lundgren wrote: > > Can you define an associative array in a way that can be evaluated at > > compile time like you can with non-associative arrays? > I'm pretty sure not. I think that it's currently suffering the same fate as > stuff > like classes and is not yet able to be CTFEed. Some day... > - Jonathan M Davis If not, then what is the D way to initialize a static field of a struct or class a la Java's static initializer blocks? I don't mind constructing the associative array at run-time if I have to, but I can't afford to do it more than the once needed.
Re: Static Associative Array
On Sunday 06 March 2011 16:30:00 Andrej Mitrovic wrote: > What about: > > enum : string[int] > { > aa = [1: "blue", 2: "red"] > } > > enum string s = aa[1]; > > void main() > { > writeln(s); > } In both cases, the AA does not exist past compile time. That may be why it works. - Jonathan M Davis
Re: Static Associative Array
What about: enum : string[int] { aa = [1: "blue", 2: "red"] } enum string s = aa[1]; void main() { writeln(s); }
Re: Static Associative Array
Jonathan M Davis: > I'm pretty sure not. I think that it's currently suffering the same fate as > stuff > like classes and is not yet able to be CTFEed. Some day... This works: import std.stdio; string foo(int x) { auto aa = [1: "hello", 2: "red"]; return aa[x]; } enum string s = foo(1); void main() { writeln(s); } Bye, bearophile
Re: Static Associative Array
On Sunday 06 March 2011 14:05:04 Peter Lundgren wrote: > Can you define an associative array in a way that can be evaluated at > compile time like you can with non-associative arrays? I'm pretty sure not. I think that it's currently suffering the same fate as stuff like classes and is not yet able to be CTFEed. Some day... - Jonathan M Davis
Static Associative Array
Can you define an associative array in a way that can be evaluated at compile time like you can with non-associative arrays?