letの内部実装に群がるLINQ星人

うかつにLINQについてつぶやくとこうなります
3
白い高野さん @masaru_b_cl

LINQのクエリ構文のletってSelectManyのsyntax sugarになるのね。

2011-08-01 15:22:47
Hiroyuki Mori @hiroyuki_mori

どんな使い方ですか? letって単に結果を一旦コレクションにして遅延評価しないやつですよね? RT @masaru_b_cl: LINQのクエリ構文のletってSelectManyのsyntax sugarになるのね。

2011-08-01 15:32:24
neuecc @neuecc

@masaru_b_cl letは通常Selectですね、多重fromがSelectManyで(少し前の私のTweetはちょっと誤ったこと書いてしまいましたががが)

2011-08-01 15:32:29
Hiroyuki Mori @hiroyuki_mori

@masaru_b_cl SelectManyはいわゆる総当たりですよね?(^^;

2011-08-01 15:33:36
白い高野さん @masaru_b_cl

. @hiroyuki_mori ということでしたf(^^;鵜呑みにした私が悪いっす>< QT @neuecc: @masaru_b_cl letは通常Selectですね、多重fromがSelectManyで(少し前の私のTweetはちょっと誤ったこと書いてしまいましたががが)

2011-08-01 15:39:02
白い高野さん @masaru_b_cl

from x in a let s = x.ToString() select s;は a.Select(x=>x.ToString())か。確かにSelectじゃん。ちゃんと自分で考えよう>俺

2011-08-01 15:41:45
Hiroyuki Mori @hiroyuki_mori

@masaru_b_cl letはそこで新しいコレクションが作成されてて、そこまでの結果が格納されている感じですね。SelectManyはforeachが2重ネストしていることを想像すれば、そんな感じですよw

2011-08-01 15:42:05
Hiroyuki Mori @hiroyuki_mori

@masaru_b_cl ってそういうことではない?(^^;

2011-08-01 15:43:01
neuecc @neuecc

@hiroyuki_mori ??いえ、そのletの理解はおかしいです。コレクションは生成されません、生成されるのは結果を格納するための中間の匿名型です。

2011-08-01 15:43:23
Hiroyuki Mori @hiroyuki_mori

@neuecc 匿名型のコレクションじゃないんですか?(^^;

2011-08-01 15:44:19
Kazuhiko Kikuchi @kazuk

@hiroyuki_mori @neuecc let でできるのはスコープにバインドするためのクロージャー

2011-08-01 15:45:11
Hiroaki SHIBUKI @hidori

@hiroyuki_mori @neuecc コレクションではないです。変更不可な一時変数ですお。

2011-08-01 15:47:55
Hiroyuki Mori @hiroyuki_mori

なるほど。そういう意味ですね。 RT @hidori: @hiroyuki_mori @neuecc コレクションではないです。変更不可な一時変数ですお。

2011-08-01 15:48:38
neuecc @neuecc

@hiroyuki_mori 例えば.Select(x=>new{Hoge,Huga}).Select(x=>new{Tako,Ika})を「遅延評価しない新しいコレクション」とは言いませんよね。letが生成するのは、まさにそれなので。

2011-08-01 15:49:17
Hiroaki SHIBUKI @hidori

@hiroyuki_mori @neuecc 変数なんでコレクションも入ることは入りますが (^^; Select() と取り違えてたり?

2011-08-01 15:49:22
Hiroyuki Mori @hiroyuki_mori

@neuecc いや、.Select().Select()とletは違うのでは?

2011-08-01 15:50:40
Hiroyuki Mori @hiroyuki_mori

@neuecc Select().Select()は遅延評価しますが、letはそこで一旦結果を作成しませんか?

2011-08-01 15:52:50
白い高野さん @masaru_b_cl

なんかLINQ星人たちの逆鱗に触れたっぽい

2011-08-01 15:53:26
白い高野さん @masaru_b_cl

@haxe 逆鱗というよりは、イベント着火しちゃったようなw

2011-08-01 15:59:23
はぇ~ @haxe

@masaru_b_cl LINQ星人は怖い人たちだから気をつけないとね!

2011-08-01 16:00:23
Hiroyuki Mori @hiroyuki_mori

@neuecc たとえば、このletの間に1つSelectを挟んでみるとどうでしょう?

2011-08-01 15:55:37
Hiroyuki Mori @hiroyuki_mori

@neuecc って、自分でやってみればいいのか(^^;

2011-08-01 15:56:17