D言語 Part10
■ このスレッドは過去ログ倉庫に格納されています
0698691
2006/10/18(水) 02:40:28実験してみた。そうらしい。
いまいちすっきり書けないのはbreakサポートの仕様の為。>>698は自分にそう言い聞かせた。
class IntList{
int[] values;
this(int[] values){ this.values = values; }
/** 0でない要素だけを列挙する */
int without0(int delegate(inout int) eachBody){
int result = 0;
foreach(value; this.values){
if(value == 0){ continue; }
result = eachBody(value);
if(result){ break; }
}
return result;
}
}
unittest{
IntList sources = new IntList([1, 0, 2, 0]);
int[] results;
foreach(i; &sources.without0){
results ~= i;
}
assert(results == [1, 2]);
}
無名デリゲートと組み合わせて呼ぶ方が自由度が高いかなー。foreachの仕様に合わせる必要がない分。
sources.without(2, (int i){ results ~= i; }); とかも書けるし。
sources.without(2) : (int i){ results ~= i; }; とか、無名デリゲートの部分を引数の外に追い出せたら最高なんだけど。
■ このスレッドは過去ログ倉庫に格納されています