- 1 名前:デフォルトの名無しさん mailto:sage [2023/01/17(火) 12:41:32.25 ID:nikBFIMQ.net]
- 公式
https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust 公式ドキュメント https://www.rust-lang.org/learn Web上の実行環境 https://play.rust-lang.org ※Rustを学びたい人はまず最初に公式のThe Bookを読むこと https://doc.rust-lang.org/book/ ※Rustを学ぶ際に犯しがちな12の過ち https://dystroy.org/blog/how-not-to-learn-rust ※Rustのasyncについて知りたければ「async-book」は必読 https://rust-lang.github.io/async-book/ ※次スレは原則>>980が立てること 前スレ Rust part18 https://mevius.5ch.net/test/read.cgi/tech/1670663822/
- 536 名前:デフォルトの名無しさん mailto:sage [2023/02/10(金) 23:46:57.14 ID:XHs/nBWT.net]
- 流れと一切関係ないけど
rubyは一時期tapとbreakで値を返す文化?あったな foo.tap {|x| bar} // selfつまりfooを返す foo.tap {|x| break bar} // breakでbarを返す foo.then {|x| bar} // ブロックの結果つまりbarを返す。今はthen使うのが素直。
- 537 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 00:18:21.11 ID:VRz38Asr.net]
- >>531
セミコロンじゃなくて&&だよね stableになるのは半年後くらいじゃない
- 538 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 00:22:48.96 ID:LT0L6YWb.net]
- >>535
再利用しない前提ならクロージャを変数に束縛してしまえば3.も視野に入ると思うんだ https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=3159733485aa1a7ee3a1838637a3a097
- 539 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 00:29:21.70 ID:N8U5Q6xc.net]
- 異なる種類のエラーを返す関数が絡んできたとき、ラベル指定breakのみエラーの合成を?演算子で関数境界に押し込められる
関数やクロージャだと「ブロック内のエラーを合成した型」を明示的に取り扱うことになって二度手間
- 540 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 00:48:21.15 ID:C7Sk8k8l.net]
- >>536
tapでbreakなんて初めて知ったわ イテレータのメソッドチェーンの途中経過を出力する時にしか使ったことなかった
- 541 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 01:02:10.14 ID:rZ1nyaTw.net]
- >>538
これは同意 >>539 サンプルコード書いてみてよ
- 542 名前:デフォルトの名無しさん [2023/02/11(土) 01:49:22.40 ID:sVZS7q05.net]
- すまんがRustlingsでまたちょっと教えてほしいんだけどさ
これ↓のListing 8-8の&mutって、一体どういう意味があるの??? https://doc.rust-lang.org/book/ch08-01-vectors.html Rustlingsをやっていて、似たような場面で&mutなしでも動いちゃうように見えるけど・・・・状況が似て非なるものなんだろか・・・・・ https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b4a253142ce1e394ba13bb0c2fc58f11
- 543 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 02:18:23.31 ID: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 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 03:08:28.64 ID:ClzSOMcn.net]
- >>535
その程度ならば型宣言で冗長になる関数化をするまでもないからブロック式でも十分かな 使い分けできるようにブロック式の不備を整備したRustの方針は正しいと思うよ >>542 所有権を渡すのは消費尽くすときだけでその後も使いたい時は参照&か可変参照&mutを渡す そのコードのv.iter_mut()の方に見かけ上&mutが見当たらないのはメソッド定義にそれがあるから メソッドでは所有権を渡すか参照を渡すか可変参照を渡すかをその定義でselfか&selfか&mut selfか指定することでメソッド使用時に毎回指定しなくて済むようになっている
- 545 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 03:56:21.21 ID: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()を呼び出してからイテレートする仕組み https://doc.rust-lang.org/std/iter/index.html#for-loops-and-intoiterator
|

|