delegates with references to local strings
Artur Skawina
art.08.09 at gmail.com
Sat Jun 2 08:38:45 PDT 2012
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
More information about the Digitalmars-d-learn
mailing list