December 26, 2007
Hi,

I have a problem with closures and D 1.024.
D2 does have full closure support, but I have to stick with D1
for now.

Problem: variable "state" changes silently when the anonymous
function goes out of the scope of function filter.
Therefore the program does print out "item" only once.

My question is if there is a workaround ("static state" wouldn't be thread safe)?

import tango.io.Stdout;
import tango.util.collection.iterator.FilteringIterator;
import tango.util.collection.iterator.ArrayIterator;
import tango.util.collection.model.Iterator;

class A
{
	uint getState() { return 0; }
}

Iterator!(A) filter(Iterator!(A) iter)
{
	uint state = 0;
	return new FilteringIterator!(A)( iter, (A item) {
		return (item.getState == state); //should always return true
	});
}

void main(char[][] args)
{
	A[] aa = new A[10];
	foreach(inout a; aa) a = new A;

	auto array_iter = new ArrayIterator!(A)(aa);
	auto iter = filter(array_iter);

	foreach(a; iter)
	{
		Stdout("item").newline;
	}
}
December 26, 2007
sorry, wrong list.