Getting the string representing the enum value ~ Proposal

kris foo at bar.com
Tue Apr 4 18:06:43 PDT 2006


 > Hope to hear the proposal again soon in the main newsgroup.

You mean, perhaps Walter does not read D.Learn as much as the other 
forums? Worth cross-posting, then, since there seems to be a general 
feeling of "worthiness" on this one ... (see the rest of the thread)



Tom wrote:
> This is something that has been discussed before. Don't know why it has 
> been rejected though.
> 
> This feature I'd love to see implemented in D. All these kind of little 
> details makes D very attractive for C/C++ programmers (some of them wish 
> there was a prettier syntax for C++ and they see D as just that, in the 
> beginning of course). Believe me I know people that loves this kind of 
> stuff, though it would be just a little detail for some points of view, 
> it's not just about saving a few lines of code, it's also about nicer 
> and prettier code (avoids duplicating stuff).
> 
> Hope to hear the proposal again soon in the main newsgroup.
> 
> Regards,
> -- 
> Tom;
> 
> kris escribió:
> 
>> Ben Gardner wrote:
>>
>>> I've done that "the hard way" in C.
>>> Here's an example in D:
>>>
>>> /////
>>> import std.stdio;
>>> import std.string;
>>>
>>> enum X {
>>>   Apple,
>>>   Bat,
>>>   Car,
>>> }
>>>
>>> char [][] X_names = [
>>>    X.Apple : "Apple",
>>>    X.Bat   : "Bat",
>>>    X.Car   : "Car",
>>> ];
>>>
>>> char [] get_X_name(X e)
>>> {
>>>    if ((e >= X.min) && (cast(int)e < X_names.length) &&
>>>        (X_names[e] !is null)) {
>>>       return X_names[e];
>>>    }
>>>    return ("invalid");
>>> }
>>>
>>> X get_X_id(char [] name)
>>> {
>>>    for (int idx = 0; idx < X_names.length; idx++) {
>>>       if ((X_names[idx] !is null) && (icmp(X_names[idx], name) == 0))
>>>          return cast(X)idx;
>>>    }
>>>    return cast(X)-1;
>>> }
>>>
>>> void main(char [][] args)
>>> {
>>>    for (int i = -1; i < 4; i++)
>>>    {
>>>       writef("%d = '%s'\n", i, get_X_name(cast(X)i));
>>>    }
>>>
>>>    char [] name = "bat";
>>>    writef("id for '%s' is %d\n", name, cast(int)get_X_id(name));
>>> }
>>> ////
>>>
>>> Running this produces the output:
>>> -1 = 'invalid'
>>> 0 = 'Apple'
>>> 1 = 'Bat'
>>> 2 = 'Car'
>>> 3 = 'invalid'
>>> id for 'bat' is 1
>>>
>>> Ben
>>>
>>> Hasan Aljudy wrote:
>>>
>>>> say I have an enum
>>>>
>>>>    enum X
>>>>    {
>>>>     A,
>>>>     B,
>>>>     C
>>>>    }
>>>>
>>>> and I have
>>>>
>>>>    void someFunc( X e )
>>>>    {
>>>>     //.. some code
>>>>    }
>>>>
>>>> I want to print the value of 'e' but I don't want to get a number!! I
>>>> want to get a string that represents it. i.e. A or B or C
>>>>
>>>>
>>>>    void someFunc( X e )
>>>>    {
>>>>       toString(e);
>>>>       e.string;
>>>>       e.value;
>>>>       //or something like that ..
>>>>    }
>>>>
>>>> Is there any such thing in D?
>>>>
>>
>>
>> I'll propose that a new property be added, somewhat like the .mangleof 
>> property. Instead, a .nameof property would simply return the lexical 
>> token for the named entity. Doesn't matter whether it refers to a 
>> struct, class, some attribute thereof, enum types or members, whatever 
>> ... the x.nameof should just return a char[] of the respective name.
>>
>> Thoughts?
> 
> 



More information about the Digitalmars-d-learn mailing list