Is there a way for a function to return itself in D?

Lars Kyllingstad public at kyllingen.NOSPAMnet
Tue Oct 14 04:12:55 PDT 2008


Simen Kjaeraas wrote:
> Like the subject says, I wonder if it's possible for a function to 
> return itself.
> No matter how I think of this, I end up with an endless recursive function
> declaration. Creating a functor that does this is simple, so why not a 
> function?

Something like this?

   import tango.io.Stdout;

   void* returnSelf()
   {
       Stdout("Hello world!").newline;
       return cast(void*) &returnSelf;
   }

Then the function can be called like this:

   void main()
   {
       void* function() rs;

       // This prints "Hello world!"
       rs = cast(void* function()) returnSelf();

       // This prints "Hello world!" too.
       rs();
   }

But it's kinda ugly, what with the casts and all. I don't see that it is 
useful either. It makes sense to return a functor, because it is an 
object and has state. A function is stateless, so any "reference" to the 
function will be identical.

-Lars


More information about the Digitalmars-d-learn mailing list