Self function
Georg Wrede
georg.wrede at iki.fi
Mon May 4 17:13:07 PDT 2009
bearophile wrote:
> Sometimes I rename recursive functions, or I duplicate and modify
them, and they stop working because inside them there's one or more copy
of their old name, so for example they recurse to their old name.
> So inside a function I'd like to have a standard name to call the
function itself, useful for recursivity.
> (If you have two or more recursive functions that call each other
> this
idea can't be used, but I think such situations are uncommon enough to
not deserve help from the language).
>
> I have just discussed this in the Python newsgroup too:
> http://groups.google.com/group/comp.lang.python/browse_thread/thread/d265da85d4b70eaf#
>
> I use more recursivity in D than in Python, because Python has troubles with it.
>
> In future in D2 you may use:
>
> int ANUGLYNAME(int n) {
> if (n <= 1)
> return 1;
> else
> mixin(__FUNCTION__ ~ "(n - 1) * n");
> }
>
> But you can't use __FUNCTION__ into a delegate/function
> pointer/lambdabecause the name isn't available, and it's a bit ugly
> syntax anyway...
>
> This looks a bit better:
>
> int ANUGLYNAME(int n) {
> if (n <= 1)
> return 1;
> else
> __self(n - 1) * n;
> }
>
> Other syntaxes are possible.
>
> __self is a way to denote the pointer/delegate of the function
> currently being run, so I think the compiler is always able to that, for
> delegate/ function pointers/ lambdas/ methods/ virtual methods/ opCalls too.
Since you need this at compile time, then you don't need a pointer. A
name would be enough.
If, as Denis pointed out, Andrei is going to provide that, and if it
turns out to have a long name (like scope.function.name), then I hope it
will be implemented so that you can alias that into something shorter,
like "thisf" or "me".
More information about the Digitalmars-d
mailing list