fuction Return function

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jul 26 16:18:20 PDT 2014


On Saturday, 26 July 2014 at 20:49:30 UTC, seany wrote:
> Can a function return a function in D? Sorry if i missed the 
> answer somewhere

Yup, you can return functions, delegates, or function pointers.

int function(int) returnsFunc1()
{
	return function(int n) { return n; };
}

int function(int) returnsFunc2()
{
         //Even works for nested functions.
         //Make them static so they don't
         //create a context pointer to
         //returnsFunc2's frame
	static int fun(int n)
	{
		return n;
	}
	
	return &fun;
}

int test(int n)
{
	return n;
}

int function(int) returnsFunc3()
{
	return &test;
}

int delegate(int) makeAdder(int numToAdd)
{
	return delegate(int n) { return n + numToAdd; };
}

void main()
{
	auto func1 = returnsFunc1();
	assert(func1(1) == 1);
	
	auto func2 = returnsFunc2();
	assert(func2(2) == 2);
	
	auto func3 = returnsFunc3();
	assert(func3(3) == 3);
	
	auto add3 = makeAdder(3);
	assert(add3(1) == 4);
}


More information about the Digitalmars-d-learn mailing list