Get variable symbol name that was passed to a paramater?

Timon Gehr timon.gehr at gmx.ch
Sat Nov 9 16:53:32 PST 2013


On 11/10/2013 01:51 AM, Timon Gehr wrote:
> On 11/09/2013 10:12 AM, Rob T wrote:
>>
>> I am wondering if there's a way to pass only the variable and have the
>> inspect function determine the variable's symbol name as passed rather
>> than have to pass both the name and value separately?
>> ...
>
> Well, yes, but the following does not scale that well, and it is
> somewhat fragile, since there is no way to get column information.
>
> import std.stdio;
> import std.string;
> import std.algorithm;
> import std.range;
> import std.conv;
>
> template LineCache(string f){ enum LineCache =
> import(__FILE__).splitLines(); }
>
> void inspect(string f=__FILE__,int l=__LINE__,T)( T value ){
>      enum
> name=LineCache!__FILE__[l-1].find("inspect").drop("inspect".length).find("(").drop(1).until!(a=>a==')').to!string.strip;
> ...

Oops. There's a typo. It should read LineCache!f, obviously.

>      writeln(name ~ " = ", value);
> }
>
> void main(){
>      int a;
>      int b=3;
>      inspect(a);
>      inspect(a+2);
>      inspect(a+b);
> }
>
>
> $ dmd -J. -run tt.d
> a = 0
> a+2 = 2
> a+b = 3
>



More information about the Digitalmars-d-learn mailing list