====== filter ======
===== Description =====
//pred//がtrueを返す要素だけをイテレートするイテレータを返します。
selectとfilterは全く同じ動作です。
===== Example =====
ゲームのオブジェクトの更新・削除を意識したサンプルです。イテレータはfiberを使って実現されているので、もちろんfor文で書いた方が速いです。
==== C++ ====
==== Xtal ====
class Object{
+ _isAlive : false;
_i;
initialize(_i){}
update(){
if (math::random() < 0.5){
%f[Object %d is finished.](_i).p;
return false;
}
return true;
}
release(){
_isAlive = false;
%f[Object %d is released.](_i).p;
}
}
objs : [];
10.times{
obj : Object(it);
obj.isAlive = true;
objs.push_back(obj);
}
objs.filter(|obj| obj.isAlive?(!obj.update()):false){
it.release();
}
objs{
it.isAlive.p;
}
==== Output ====
Object 0 is finished.
Object 0 is released.
Object 1 is finished.
Object 1 is released.
Object 3 is finished.
Object 3 is released.
Object 5 is finished.
Object 5 is released.
Object 6 is finished.
Object 6 is released.
false
false
true
false
true
false
false
true
true
true