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