特に意義はない.
import std.stdio; import std.conv; import std.range; import core.thread; class A { int x, y; string toString() { return "(" ~ to!(string)(x) ~ "," ~ to!(string)(y) ~ ")"; } } void fun(A a) { // writeln a.x++;//1,0 Fiber.yield(); // writeln a.y++;//1,1 Fiber.yield(); // writeln a.x++;//2,1 a.y++;//2,2 // writeln } struct FiberRange(FiberT) { private FiberT f; this(FiberT f) { this.f = f; } void popFront() { f.call(); } FiberT front() { return f; } bool empty() { return f.state == Fiber.State.TERM; } } unittest { static assert(isInputRange!(FiberRange!Fiber)); } void main() { A a = new A; auto f = new Fiber({fun(a);}); auto fr = FiberRange!(Fiber)(f); foreach (e; fr) { writeln(a); } writeln(a); }
追記
あ−.だいたい,foreach の e を使ってないじゃないか.