[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild2 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
981
(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 01:41:24.01 ID:1/8GPuaw(1/7) AAS
>>977
977(2): 名前は開発中のものです。 [sage] 2020/01/10(金) 23:26:02.35 ID:XdY5fR78(1) AAS
>>976
遅延評価というものがあるし、そもそもWhereが返すのはIEnumでなく値そのものだからそこのところを誤解してる
ごめん何言ってるのかよく分からん

外部リンク:docs.microsoft.com
982
(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 01:45:41.87 ID:1/8GPuaw(2/7) AAS
WhereがIEnum返さなかったら次の人どうやって列挙するの
983
(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 01:49:41.69 ID:1/8GPuaw(3/7) AAS
>>977
ついでに言うと遅延評価ってのはまさに後からMoveNextした時に評価されることを指すと思うぞこの場合
985
(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 02:17:15.69 ID:1/8GPuaw(4/7) AAS
>>984
984(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 02:03:49.82 ID:eNMw2FnY(1/6) AAS
>>981-983
実行時の話な
var seq = list.Where(...)が返すのはIEnumだが、
実際にforeach(var n in seq)で遅延評価されるときには一つずつの値を返してるし、それが次のWhereに送られてる
ループの位置を見てみろ、配列は一回しか回ってないだろ?
いやだからその展開式みたいに実行時コードがなるって話あったっけ?
こんぱいられべるでLINQ特化で最適化しないとそうはできないと思うけど、いや俺が知らないだけかもなのでこう最適化されるよーってソースあるなら教えてくれ
989
(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 11:12:22.12 ID:1/8GPuaw(5/7) AAS
>>988
988(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 03:42:34.65 ID:eNMw2FnY(3/6) AAS
とりあえず>>969>>976から読み取ると、LINQで繋がれたメソッドは全部独立したIEnumerableを返してるような誤解をしてるんだと思う
実際は宣言時にチェーンの最後にあるメソッドが一つのIEnumerableを返すだけだし、間にある他のメソッドは最後のメソッドがデリゲートとして一括で実行する
だからMoveNextは一つの要素に一回ずつしか基本的に呼ばれず、従ってループも一回だけ
これで納得出来ないならもう5個チェーン繋げたら5回ループされてると思っても良いよ、別にそれでも実害は一切無い
いやごめん、むしろお前がなんでそんな理解してるのか分からん。
それはイテレーターを書くためのシンタックスシュガーであって、結局はEnumeから列挙するためにMoveMextやら何やら呼ぶことになると思うが。
そもそもお前が言ってるようなループなんてコード上は展開されないだろ
あくまでもEnumeのMoveNextやらなんやらで列挙されてくだけで。つか自分があげたWhereのどこ見りゃ途中のものも全部前のが返すEnumeを第一引数として受け取りEnumeを返すってのが明らかだと思うが。
その上でWhereを続けた時などにC#上もしくはコンパイラ生成時に最適化がなされる事はあり得るかも?とは思うけどそう言うこと言いたいんじゃないよね
993
(2): 名前は開発中のものです。 [sage] 2020/01/11(土) 12:34:46.58 ID:1/8GPuaw(6/7) AAS
>>991
991(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 12:19:43.31 ID:eNMw2FnY(4/6) AAS
>>989
率直に言ってお前は何を主張したいの?
まずそれ教えてくれ
そのレスを読むだけだとわざわざ実装のURLまで見せたのにソースも読めない子なんだぁとしか思えん
最初はなんか最適化かなんか俺の知らないのあるの?って感じだったけど、今はなんか勘違いしてる人に諭してあげようかなと思ったけど無駄っぽいからもうどうでもいいかな

最後に言っとくけど、おまいのあげたイテレーターのソース、foreachが一つしか展開されないとか言ってるけど思いっっっっっきり勘違いしてると思うよ
Whereのイテレータ内で展開してるforeachはソースのイナミュレーターを回してるけどそれは前のWhereが返すイナミュラブルを回してて、それはまた別にforeach x展開してるイテレーターによるものだよ。
と言ってそれはシンタックスシュガーによるものだからforeachが何重になってると言うのともまた違う
999: 名前は開発中のものです。 [sage] 2020/01/11(土) 13:13:52.35 ID:1/8GPuaw(7/7) AAS
>>996
996(1): 名前は開発中のものです。 [sage] 2020/01/11(土) 13:01:07.21 ID:eNMw2FnY(5/6) AAS
>>993
だろ、やっぱり入れ子になってると勘違いしてるよな?

サンプルソース書いてあげたから見てみな
IL_009aのループ一度しか無いし中身の取り出しも一回だけ
その後でLINQメソッドに渡されたデリゲートを適用してそのままループ内の処理に進んでる
画像リンク
マジで大丈夫?
そりゃそこのforeachがループにされてるだけでそこにループがネストするなんて話はこれっぽっちもしてないんだが
>>993でもそう説明してるけど分からん?マジでシンタックスシュガーによるイテレーターの実装理解できてないだろお前
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s