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;
    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

Reply via email to