PHPで動くLINQもどきの開発に関するディスカッション
- tanakahisateru
- 13789
- 0
- 18
- 7
@tanakahisateru @ktz_alias あと、キー値に関してもオリジナルのものを返すように直したほうがいいね。今はくるんだIteratorで採番しなおしちゃってるから。
2013-02-02 19:18:20@akanehara @ktz_alias 一貫してそれでいけそうなら! jQueryのmapもそんな感じだった気がする。
2013-02-02 19:19:24@tanakahisateru @ktz_alias 引き受けるクロージャの種類は セレクタ、結合セレクタ、述語の3種類だけなので、たぶん大丈夫。もしジェネレータでキー返せないなら、ジェネレータ実装を廃止する。
2013-02-02 19:21:18@akanehara ちがうか…。 $this->group->key()でグループのキーが取り出されるから、そのまま渡すだけでいいのか。
2013-02-02 19:29:42@tanakahisateru ジェネレータでも問題なくキーと値が返せる模様 http://t.co/UhgyJtDT の「値とキーの yield」節
2013-02-02 19:33:03うん、やっぱりジェネレータは Ginqの実装のコアじゃなくて、fromのソースとしてとりうるもの、としたほうが良さそうだ。
2013-02-02 19:47:57@tanakahisateru こないだ言ってくれてたことの意味やっとつかめた。yieldを使いたいのはどっちかというとクライアントコード側で、ライブラリはそれをIteratorとして食べてくれればいい。
2013-02-02 19:51:51@tanakahisateru ならば巻き戻し可能かどうか、とか、メモ化するかしないか、なんてのはfromのソース側の問題として、Ginqとは切り離せるもんね。
2013-02-02 19:53:12@akanehara おーいぇあ。巻き戻せないのを食わせた人がallするって状況なら、例外出すのはどこ切ってもユーザのコードだし、やろうとしてることの意図がおかしいのを自分のコードだけで判断してもらえる。
2013-02-02 20:22:23元のキーを維持するのはやめとこうかな。たとえば値だけからなる単純な配列に対して drop(2) としたとき、結果のキー値が 2 から始まるのはどうなのか。また、concat や cycle や selectManyでなどの混ぜ込み系ではキーの衝突が起きる。
2013-02-02 21:22:10さて first を実装する前にテスト書きますかね、と思ったら first のテストメソッド名が testFirst な件
2013-02-02 22:00:21first($default = null) と find($predicate, $default = null) を push〜 https://t.co/EuyvZcRg
2013-02-02 22:33:03@tanakahisateru そうすると「単純なイテレータを合成して複雑なイテレータを構成するツール」とシンプルに言い切れるので、ソースの性質にタッチしないほうがむしろいいね。
2013-02-02 23:59:04@ktz_alias @tanakahisateru select($selector, [$keySelector]) と拡張したうえで、toDictionary を select($selector, $keySelector)->toArray() のエイリアスにしますね
2013-02-03 14:07:38toDictionary は LINQ にあわせて toDictionary($keySelector, [$elementSelector]) に。このとき $elementSelector はデフォルトで恒等関数。
2013-02-03 14:12:29