learning reflection in D

drug drug2004 at bk.ru
Thu Oct 5 15:08:33 UTC 2017


05.10.2017 18:04, Adam D. Ruppe пишет:
> On Thursday, 5 October 2017 at 14:59:10 UTC, drug wrote:
>> 1) why .stringof and typeid() is equal logically and different in 
>> fact? What is difference between them? Is it that stringof compile 
>> time and typeid runtime things? Anyway wouldn't it be better they will 
>> equal both logically and literally?
> 
> stringof is a static debugging aid, just a string that kinda represents 
> it in code. It isn't guaranteed to match anything, but should be enough 
> that when you eyeball it it points you in the right direction... you 
> shouldn't rely on it to be anything specific. typeid, on the other hand, 
> is a published, documented object with methods and defined comparisons. 
> So that's one difference.
> 
> The other one is indeed compile time vs runtime: stringof is purely 
> compile time, whereas typeid() returns a runtime object on a runtime 
> object. To see the difference, try:
> 
> Object o = new MyClass();
> typeid(o);
> 
> 
> You'll see it is MyClass, but the static versions (stringof, typeof, 
> etC) will all think of it as Object.
> 
> 
>> 2) Where do these attributes come from? I mean `pure nothrow @nogc 
>> @safe` except `@property` that I set explicitly?
> 
> You didn't specify a return value for those functions, which meant the 
> compiler inferred a bunch about it. It inferred the return value and 
> those other attributes to fill in the gap.
> 
> If you gave an explicit return value `@property int` or `@property 
> void`, then it wouldn't automatically fill stuff in anymore.
Thank you, Adam!


More information about the Digitalmars-d-learn mailing list