Self function
Frank Benoit
keinfarbton at googlemail.com
Mon May 4 13:12:42 PDT 2009
bearophile schrieb:
> 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/lambda because 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.
>
> Bye,
> bearophile
how about
scope.function // the surrounding function
scope.method // the surrounding method
scope.class // the surrounding class
scope.class.outer // the outer class of the surrounding class
The current functions name, was requested so often:
scope.function.name
?
More information about the Digitalmars-d
mailing list