PHPで動くLINQもどきの開発に関するディスカッション

https://github.com/akanehara/ginq の開発に関係しそうなツイートをまとめました。終わらないので随時更新(予定)。
6
前へ 1 2 3 ・・ 15 次へ
第297654658185列 @akanehara

@tanakahisateru @ktz_alias あと、キー値に関してもオリジナルのものを返すように直したほうがいいね。今はくるんだIteratorで採番しなおしちゃってるから。

2013-02-02 19:18:20
田中ひさてる @tanakahisateru

@akanehara @ktz_alias 一貫してそれでいけそうなら! jQueryのmapもそんな感じだった気がする。

2013-02-02 19:19:24
第297654658185列 @akanehara

@tanakahisateru @ktz_alias 引き受けるクロージャの種類は セレクタ、結合セレクタ、述語の3種類だけなので、たぶん大丈夫。もしジェネレータでキー返せないなら、ジェネレータ実装を廃止する。

2013-02-02 19:21:18
Ktz @ktz_alias

@akanehara group化した場合は、そのキー返した方がいいかも。groupの中はオリジナルのキーでOKかと

2013-02-02 19:21:42
第297654658185列 @akanehara

おっと、ジェネレータはキー値返せないっぽいな。

2013-02-02 19:28:40
Ktz @ktz_alias

@akanehara ちがうか…。 $this->group->key()でグループのキーが取り出されるから、そのまま渡すだけでいいのか。

2013-02-02 19:29:42
Ktz @ktz_alias

@tanakahisateru ジェネレータでも問題なくキーと値が返せる模様 http://t.co/UhgyJtDT の「値とキーの yield」節

2013-02-02 19:33:03
第297654658185列 @akanehara

@ktz_alias ですね。ルックアップテーブルのキーでよさそうですね。

2013-02-02 19:39:31
第297654658185列 @akanehara

うん、やっぱりジェネレータは Ginqの実装のコアじゃなくて、fromのソースとしてとりうるもの、としたほうが良さそうだ。

2013-02-02 19:47:57
第297654658185列 @akanehara

@tanakahisateru こないだ言ってくれてたことの意味やっとつかめた。yieldを使いたいのはどっちかというとクライアントコード側で、ライブラリはそれをIteratorとして食べてくれればいい。

2013-02-02 19:51:51
第297654658185列 @akanehara

@tanakahisateru ならば巻き戻し可能かどうか、とか、メモ化するかしないか、なんてのはfromのソース側の問題として、Ginqとは切り離せるもんね。

2013-02-02 19:53:12
田中ひさてる @tanakahisateru

@akanehara おーいぇあ。巻き戻せないのを食わせた人がallするって状況なら、例外出すのはどこ切ってもユーザのコードだし、やろうとしてることの意図がおかしいのを自分のコードだけで判断してもらえる。

2013-02-02 20:22:23
第297654658185列 @akanehara

元のキーを維持するのはやめとこうかな。たとえば値だけからなる単純な配列に対して drop(2) としたとき、結果のキー値が 2 から始まるのはどうなのか。また、concat や cycle や selectManyでなどの混ぜ込み系ではキーの衝突が起きる。

2013-02-02 21:22:10
第297654658185列 @akanehara

「セレクタや述語でキー値が使える」にとどめておくか。

2013-02-02 21:24:38
第297654658185列 @akanehara

したがって、GroupBy だけはキーをつけて返す、にしよう。

2013-02-02 21:31:01
第297654658185列 @akanehara

セレクタ/述語でキー値とれるようになったのでいったんpush

2013-02-02 21:51:21
第297654658185列 @akanehara

さて first を実装する前にテスト書きますかね、と思ったら first のテストメソッド名が testFirst な件

2013-02-02 22:00:21
第297654658185列 @akanehara

first($default = null) と find($predicate, $default = null) を push〜 https://t.co/EuyvZcRg

2013-02-02 22:33:03
第297654658185列 @akanehara

オリジナルキーをどうするかについては、ちょっと考え中

2013-02-02 22:33:57
第297654658185列 @akanehara

@tanakahisateru そうすると「単純なイテレータを合成して複雑なイテレータを構成するツール」とシンプルに言い切れるので、ソースの性質にタッチしないほうがむしろいいね。

2013-02-02 23:59:04
第297654658185列 @akanehara

LINQと名前違っちゃってるメソッドはなるべくエイリアス作っとこう

2013-02-03 10:54:37
第297654658185列 @akanehara

@ktz_alias @tanakahisateru select($selector, [$keySelector]) と拡張したうえで、toDictionary を select($selector, $keySelector)->toArray() のエイリアスにしますね

2013-02-03 14:07:38
第297654658185列 @akanehara

toDictionary は LINQ にあわせて toDictionary($keySelector, [$elementSelector]) に。このとき $elementSelector はデフォルトで恒等関数。

2013-02-03 14:12:29
前へ 1 2 3 ・・ 15 次へ