__FUNCTION__
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Feb 28 13:50:25 PST 2009
Johan Granberg wrote:
> 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"?
We better use "..".
int factorial(int c)
{
//writefln(fthis.stringof);
//writefln(typeof(fthis).stringof);
if (c < 2) return 1;
return ..(c - 1) * c;
}
Andrei
More information about the Digitalmars-d
mailing list