プログラミング言語 Rust 4【ワッチョイ】 (302レス)
プログラミング言語 Rust 4【ワッチョイ】 http://mevius.5ch.net/test/read.cgi/tech/1514107621/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
91: デフォルトの名無しさん (ワッチョイ 2bb3-ogOK) [] 2018/03/18(日) 21:36:06.49 ID:kfSBwJmk0 Iterator::mapに渡すクロージャ内で、クロージャ内の変数への参照を持つstructを返したい時ってどう対処するのが正解ですか? https://play.rust-lang.org/?gist=a15e0dfa10339570fef5b9225761a9f0&version=stable http://mevius.5ch.net/test/read.cgi/tech/1514107621/91
94: デフォルトの名無しさん (ワッチョイ bdb3-kj1m) [sage] 2018/03/19(月) 13:44:00.51 ID:aUxUFBJe0 >>93 仮引数mのライフタイムはクロージャ内なのは変わらないよ。>>92は仮引数を参照じゃなく消費してるから通る(>>92の&mじゃなくてmで良い) クロージャが実行されないから、ではなく、mochiの値が消費されてるのにその参照を持たせようとしてるから駄目 試しに>>91のコードでmochi.map(|m| { 0 })とか書いて、mochiをprintln!に渡してみようとすると怒られるよ。もう使ってるって。 そこらへんの細かいルールを覚えるの大変だし、コンパイラもまだ分かりやすいエラーメッセージ吐いてくれないから、 ・参照を使うときは、参照元をちゃんと生かしておくこと ・参照を使った構造体は、元の値を修飾(見方を変える、新しい機能を持たせる等)するようなパターンに限定すること を守るようにした方がいいよ http://mevius.5ch.net/test/read.cgi/tech/1514107621/94
96: デフォルトの名無しさん (ワッチョイ bdb3-kj1m) [sage] 2018/03/19(月) 23:26:36.74 ID:aUxUFBJe0 「消費されるので通る」じゃ言葉足らずでした。「参照じゃなくmoveして延命している」の方が通じるかも >>91のコードを整理すると 1. HitoはMochiの参照を持ってるから、Hitoが有効なスコープ中はMochiも有効じゃないといけない 2. mochiはinto_iterで作られてるからMochi型を吐き出す、けど所有はしない 3. なのにmochizukiはmochi.map()で各要素への参照しか持たない 4. mochiから吐き出されたMochiの受け皿が無いんでエラーになる これを解決するには 1を変えてHitoがMochiを所有するようにデータ構造を変える 2で作られたMochi型の値をしっかり保持する変数を用意する の2種類くらいしか思いつかん。 Does Not Live Longエラーはライフタイムがどうのこうのと小手先で弄るより、 値の所有者を明快にしたり、データ構造を見直してみると案外素直に直せるのが経験則。 http://mevius.5ch.net/test/read.cgi/tech/1514107621/96
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.017s