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());
}
}