confusing (buggy?) closure behaviour
    Zoran Isailovski 
    dmd.zoc at spamgourmet.com
       
    Fri Dec 12 08:32:03 PST 2008
    
    
  
I'm an experienced C#, Java and Python programmer, and have employed closures (and C# delegates) upon numerous occasions. While experimenting with D closures and delegates, I was stroke by a phenomenon I cannot explain. Here's the code:
module closures01;
import std.stdio;
alias int delegate(int arg) Handler;
Handler incBy(int n)
{
	return delegate(int arg){ return arg + n; };
}
Handler mulBy(int n)
{
	return delegate(int arg){ return arg * n; };
}
void test1()
{
	writefln("\ntest1:\n----------------------------------------");
	int x = 10, y;
	y = mulBy(3)(x); writefln("%d * 3 -> %d", x, y);
	y = mulBy(4)(x); writefln("%d * 4 -> %d", x, y);
	y = incBy(2)(x); writefln("%d + 2 -> %d", x, y);
}
void test2()
{
	writefln("\ntest2:\n----------------------------------------");
	int x = 10, y;
	Handler times3 = mulBy(3);
	Handler times4 = mulBy(4);
	Handler plus2 = incBy(2);
	y = times3(x); writefln("%d * 3 -> %d", x, y);
	y = times4(x); writefln("%d * 4 -> %d", x, y);
	y = plus2(x); writefln("%d + 2 -> %d", x, y);
}
public void run()
{
	test1();
	test2();
}
/* **************************************** *
 * Compiled with: Digital Mars D Compiler v1.030
 *
 * (Unexplainable) program output:
 
test1:
----------------------------------------
10 * 3 -> 30
10 * 4 -> 40
10 + 2 -> 12
test2:
----------------------------------------
10 * 3 -> 20
10 * 4 -> 42846880
10 + 2 -> 4284698
* **************************************** */
What goes wrong???
-------------- next part --------------
A non-text attachment was scrubbed...
Name: closures01.d
Type: application/octet-stream
Size: 1265 bytes
Desc: not available
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20081212/da33e77c/attachment.obj>
    
    
More information about the Digitalmars-d-learn
mailing list