import std.stdio;

void main()
{
alias DelegateT = string delegate();

// 每个有自己域的闭包数组.
DelegateT[] funcs;
foreach (i; ["ham", "cheese"]) {
// 在闭包域中复制
string myStr = i.dup;
// 闭包应有自己的域
funcs ~= (() => myStr ~ " sandwich");
}

foreach (f; funcs) {
writeln(f());
}
}

用两个闭包:

import std;

void main(){
alias DelegateT = string delegate();

DelegateT[] funcs;
foreach (i; ["ham", "cheese"]) {
(){
string myStr = i.dup;
funcs ~= (() => myStr ~ " sandwich");
}();
}

foreach (f; funcs) {
writeln(f());
}
}

它是漏洞:地址

也可这样,

import std;
import std.stdio;

void main()
{
alias DelegateT = string delegate();

DelegateT[] funcs;
static foreach (alias i; ["ham", "cheese"]) {//用静每一,与别名.但代码只能在编译时用.
funcs ~= (() => /*myStr*/ i ~ " sandwich");
}

foreach (f; funcs) {
writeln(f());
}
}