Ruby in D その2
折角なので出しそびれていたネタを。
import std.c.stdio; Each!(T) each(T)(T t, T[] ts ...){ Each!(T) e; e.ary_ = t ~ ts; return e; } struct Each(T){ T[] ary_; Each_!(T) opOr(out T t){ Each_!(T) e; e.ary_ = ary_; e.ptr_ = &t; return e; } } struct Each_(T){ T* ptr_; T[] ary_; void opOr_r(lazy void dg){ foreach (T t; ary_){ *ptr_ = t; dg(); } } } void main(){ int i; char[] s; s ~= "hog"; each(1, 2, 3) |i| ( printf("%d\n", i), printf("%.*s\n", s ~= "e") ); }
カッコが必要なのが気に食わない…