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".
