digitalmars.D.learn - Associative Array, key and value as type of string or char[]
- timewulf (18/18) Feb 02 2013 Hi all,
- Namespace (15/15) Feb 02 2013 It seems you are right. I get the same error. You should open a
- timewulf (28/41) Feb 02 2013 Thanks for the answer.
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (16/19) Feb 02 2013 You need 'static this()':
- timewulf (3/25) Feb 02 2013 Thanks, I applied both and errors are gone.
- FG (2/7) Feb 02 2013 Doesn't work in the current version? In DMD 2.060 it works.
Hi all, in the moment I'm running against a wall: I want to put some strings together into an ass. array: For example a command with it's description like the following. char[char[]] ch_Description = [ 'kill' : 'kills a process', 'pause' : 'pauses a process' ] I tried with all combinations of char[char[]] over string[char[]], char[string] to string[string] with depending quotations 'abc' to "abc". My idea is just to print out the combinations to console. I'm not even .sure, if it's a good idea to do so, but what makes me cry is, after all trying, is that I can't find a solution. The compiler messages go from "no implicit conversion" to "cast(char) of string is deprecated" and others. I read much about that key-values have to be immutable and so on and I can accept the reasons, but I can't believe, there's no possible solution for my underlaying idea. Any ideas? timewulf
Feb 02 2013
It seems you are right. I get the same error. You should open a bug report for this. But as long as it isn't fixed you can use an output via foreach. import std.stdio; void main() { string[string] ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; // writeln(ch_Description); // does not work, but it should foreach (string key, string value; ch_Description) { writeln(key, ':', value); } }
Feb 02 2013
On 02.02.2013 16:06, Namespace wrote:import std.stdio; void main() { string[string] ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; // writeln(ch_Description); // does not work, but it should foreach (string key, string value; ch_Description) { writeln(key, ':', value); } }Thanks for the answer. I tried your code and very surprisingly: It works on both ways. After searching for the differences to my code, I found my fault: import std.stdio; string[string] ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; void main() { writeln(ch_Description); // does not work, but it should foreach (string key, string value; ch_Description) { writeln(key, ':', value); } } I declared the array outside of main(), because I wanted to use them in more than one function. The errors I got were all, because of this first one, "src/tstsuite.d(3): Error: non-constant expression ["kill":"kills a process","pause":"pauses a process"]" which shows up when compiling this simple example. After checking this, I stripped down my program from unneeded casts and so on and now I see the same error message as above. It just didn't come up, because of my workarounds, which created the other failures. Thanks for showing me the forest behind this big tree ;-) Now I've just to look, how to declare this array in the way of public constants. Thanks and have nice weekend!
Feb 02 2013
On 02/02/2013 08:00 AM, timewulf wrote:After searching for the differences to my code, I found my fault:It is not your fault. :)Now I've just to look, how to declare this array in the way of public constants.You need 'static this()': import std.stdio; string[string] ch_Description; static this() { ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; } void main() { // ... } You can even make the AA immutable if it never changes: immutable string[string] ch_Description; Ali
Feb 02 2013
On 03.02.2013 06:09, Ali Çehreli wrote:You need 'static this()': import std.stdio; string[string] ch_Description; static this() { ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; } void main() { // ... } You can even make the AA immutable if it never changes: immutable string[string] ch_Description; AliThanks, I applied both and errors are gone. Timewulf
Feb 02 2013
On 2013-02-02 16:06, Namespace wrote:string[string] ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; writeln(ch_Description); // does not work, but it shouldDoesn't work in the current version? In DMD 2.060 it works.
Feb 02 2013
On Saturday, 2 February 2013 at 16:06:09 UTC, FG wrote:On 2013-02-02 16:06, Namespace wrote:I've cloned the github version two days ago and with that I get lots of errors. Maybe I should open a bug report. :)string[string] ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; writeln(ch_Description); // does not work, but it shouldDoesn't work in the current version? In DMD 2.060 it works.
Feb 02 2013
On 02.02.2013 17:06, FG wrote:On 2013-02-02 16:06, Namespace wrote:I tried in dmd 2.061 and git-version from yesterday: Both work!string[string] ch_Description = [ "kill" : "kills a process", "pause" : "pauses a process" ]; writeln(ch_Description); // does not work, but it shouldDoesn't work in the current version? In DMD 2.060 it works.
Feb 02 2013