Т
Size: a a a
Т
И
МВ
МВ
import std;
struct TestIter {
int opApply(scope int delegate(int) dg) {
for (int k=1; k<=3; ++k) {
dg(k);
}
return 1;
}
}
void main() {
alias func = void delegate();
func[] cbs;
foreach (int k; TestIter()) {
cbs ~= () => k.writeln;
}
foreach(d; cbs) d();
}
МВ
МВ
МВ
И
И
МВ
alias func = void delegate();контекст - переменная k, которая одна для всех лямбд
func[] cbs;
foreach (int k; 0..3) {
cbs ~= () => k.writeln;
}
foreach(d; cbs) d();
И
И
МВ
МВ
alias func = void delegate();t тут на стеке нет темболее
func[] cbs;
foreach (int k; 0..3) {
int t = k;
cbs ~= () => t.writeln;
}
foreach(d; cbs) d();
И
И
МВ
import std;
struct RaiiStruct {
int value;
~this() {
writeln("destroyed ", value);
}
}
void main() {
alias func = void delegate();
func[] cbs;
foreach (int k; 0..3) {
RaiiStruct str;
str.value = k;
cbs ~= () => str.value.writeln;
}
foreach(d; cbs) d();
}
МВ
destroyed 0
destroyed 1
destroyed 2
2
2
2
Т
И