Rust part19
at TECH
1:デフォルトの名無しさん
23/01/17 12:41:32.25 nikBFIMQ.net
公式
URLリンク(www.rust-lang.org)
URLリンク(blog.rust-lang.org)
URLリンク(github.com)
公式ドキュメント
URLリンク(www.rust-lang.org)
Web上の実行環境
URLリンク(play.rust-lang.org)<)
※Rustを学ぶ際に犯しがちな12の過ち
URLリンク(dystroy.org)
※Rustのasyncについて知りたければ「async-book」は必読
URLリンク(rust-lang.github.io)
※次スレは原則>>980が立てること
前スレ
Rust part18
スレリンク(tech板)
543:デフォルトの名無しさん
23/02/11 02:18:23.31 N8U5Q6xc.net
>>542
詳細はトレイトとか Deref とか IntoIterator とか関連型とかその章ではまだ出て来てない概念が色々絡むが
for item in v の v に対して
Vec<T> を渡したら item は T になって所有権ごと持ってく
&Vec<T> を渡したら item は &T になって不変参照のイテレーションになる
&mut Vec<T> を渡したら item は &mut T になって可変参照のイテレーションになる
Vec<T>は DerefMut<Target=[T]> を実装しているから &mut Vec<T> は暗黙のうちに deref_mut のメソッドを通して &mut [T] に変換されて
その &mut [T] が IntoIterator<Item=&mut T> を実装しているからfor文で &mut T のイテレーションができる
544:デフォルトの名無しさん
23/02/11 03:08:28.64 ClzSOMcn.net
>>535
その程度ならば型宣言で冗長になる関数化をするまでもないからブロック式でも十分かな
使い分けできるようにブロック式の不備を整備したRustの方針は正しいと思うよ
>>542
所有権を渡すのは消費尽くすときだけでその後も使いたい時は参照&か可変参照&mutを渡す
そのコードのv.iter_mut()の方に見かけ上&mutが見当たらないのはメソッド定義にそれがあるから
メソッドでは所有権を渡すか参照を渡すか可変参照を渡すかをその定義でselfか&selfか&mut selfか指定することでメソッド使用時に毎回指定しなくて済むようになっている
545:デフォルトの名無しさん
23/02/11 03:56:21.21 VRz38Asr.net
>>542
vがVec<T>の場合
for i in &mut v {…} と
for i in v.iter_mut() {…} は同じ
前者は&mut Vec<T>のIntoIteratorトレイトのinto_iter()が呼ばれる
その中身はself.iter_mut()なので後者と同じになる
for loopはiterable(IntoIteratorを実装してるもの)を受け取って
そのinto_iter()を呼び出してからイテレートする仕組み
URLリンク(doc.rust-lang.org)
2から表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
595日前に更新/165 KB
担当:undef