__FUNCTION__

Johan Granberg lijat.meREM at OVEgmail.com
Sat Feb 28 13:40:25 PST 2009


Denis Koroskin wrote:

> On Sat, 28 Feb 2009 23:39:41 +0300, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
> 
>> Nick Sabalausky wrote:
>>> "dsimcha" <dsimcha at yahoo.com> wrote in message
>>> news:goc1k7$qml$1 at digitalmars.com...
>>>> == Quote from Jarrett Billingsley (jarrett.billingsley at gmail.com)'s
>>>> article
>>>>> Can we get this please?  It's so simple and would be terribly useful.
>>>> Can someone explain what __FUNCTION__ would do in a little more
>>>> detail?  I feel
>>>> like the two posts of this thread so far are talking in secret
>>>> __FUNCTION__-dealer
>>>> code.
>>>  void foofunc()
>>> {
>>>     Stdout.formatln("{}", __FUNCTION__);
>>> }
>>>  Output:
>>> foofunc
>>>  Ie, basically the same as __FILE__ and __LINE__ and useful in the same
>>> ways.
>>
>> I think instead of __FUNCTION__ we'll define a much more comprehensive
>> static reflection facility.
>>
>>> Also, I'd like to be able to do something like:
>>>  Reflect.invoke(__FUNCTION__, params);
>>
>> Yah... and Variant needs to have something similar as well. We know
>> quite what std.reflect needs to look like, just we want to keep our
>> fingers out of too many pies at once.
>>
>>> Something funtionally equiveilent to that would aid maitenance of
>>> self-invoking functions (not only recusion, but also func overloads
>>> that are defined in terms of one "primary" overload).
>>>  Also would be nice for similar reasons: __CLASS__ (or something
>>> similar that would also work for structs)
>>
>> Yah.
>>
>> Andrei
> 
> Yes. When writing a recursive function, it is often desired to have a way
> to call the function recursively via some shortcut, something like 'fthis'
> (this function). It would be great to have something like this in D. That
> way _FUNCTION__ could be replaced by 'fthis.stringof' or something
> similar. It also gives small other advantages (easier code refactoring
> etc). Here is an example:
> 
> int factorial(int c)
> {
>     //writefln(fthis.stringof);
>     //writefln(typeof(fthis).stringof);
> 
>     if (c < 2) return 1;
>     return fthis(c - 1) * c;
> }

"fthis" does not sounds like a nice keyword. How about "self"?



More information about the Digitalmars-d mailing list