__FUNCTION__

Denis Koroskin 2korden at gmail.com
Sat Feb 28 13:01:46 PST 2009


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




More information about the Digitalmars-d mailing list