On 06/02/12 14:01, Tobias Pankrath wrote: > consider this: > > > ------------ > import std.stdio; > import std.string; > > alias void delegate() dlgt; > > int main() > { > dlgt[] dgs; > string[] lines = ["line A", "line B", "line C"]; > foreach(line; lines) > { > writeln(line); > dgs ~= { writeln(line); }; > } > > foreach(dg; dgs) { dg(); } > return 0; > } > > ----------- > > It prints every line in line and stores a delegate that does the same. > The output is: > > line A > line B > line C > line C > line C > line C > > I want it to print every line twice. How can I store the string of the > current iteration with a delegate? I tried dup'ing into a local, which didn't > help.
dgs ~= (string l) { return { writeln(l); }; }(line); This isn't really much different from http://d.puremagic.com/issues/show_bug.cgi?id=2043 but I'm not convinced the compiler should be cloning the variables here (ie if that "bug" really is a bug); it certainly can be surprising though. artur