公式
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 part24
https://mevius.5ch.net/test/read.cgi/tech/1716759686/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
探検
Rust part25
■ このスレッドは過去ログ倉庫に格納されています
2024/07/31(水) 00:46:26.17ID:DBMWY2QT
209デフォルトの名無しさん
2024/08/14(水) 13:07:18.24ID:HK0RNQ5P >>174
>> next()を1回呼ぼうが2回呼ぼうが、
Rustではその1回目のnext()の値を保持したまま2回目を使えるかどうかの違いが大きいんだよ
最初の仕様は各々の値が使えれることが確認できればいい仕様になっているね
assert_eq!(Some(&b'1'), bytes.next());
assert_eq!(None, bytes.next());
その次の仕様は1回目の値を持ったまま2回目の値を使える仕様になっているね
let byte_1 = bytes.next();
let byte_2 = bytes.next();
if byte_1 == byte_2 {
// 何かしらの処理
}
つまり拡大された別の仕様となっているわけだよ
そのため最初の仕様ではライフタイムがselfと同じでも全く問題ないけど
次の仕様ではselfと異なるものでないといけなくなる
そこが本質があってどちらの仕様も別のものとして存在しているわけよ
わかりやすく例を挙げて説明すると
次のように&[T]ではなくVec<T>を保持するバージョンに変えてみよう
>> next()を1回呼ぼうが2回呼ぼうが、
Rustではその1回目のnext()の値を保持したまま2回目を使えるかどうかの違いが大きいんだよ
最初の仕様は各々の値が使えれることが確認できればいい仕様になっているね
assert_eq!(Some(&b'1'), bytes.next());
assert_eq!(None, bytes.next());
その次の仕様は1回目の値を持ったまま2回目の値を使える仕様になっているね
let byte_1 = bytes.next();
let byte_2 = bytes.next();
if byte_1 == byte_2 {
// 何かしらの処理
}
つまり拡大された別の仕様となっているわけだよ
そのため最初の仕様ではライフタイムがselfと同じでも全く問題ないけど
次の仕様ではselfと異なるものでないといけなくなる
そこが本質があってどちらの仕様も別のものとして存在しているわけよ
わかりやすく例を挙げて説明すると
次のように&[T]ではなくVec<T>を保持するバージョンに変えてみよう
210デフォルトの名無しさん
2024/08/14(水) 13:08:44.09ID:HK0RNQ5P >>209の続き
相違点以外は元コードと同じ名前と形で書いています
struct ByteIter {
vec: Vec<u8>,
index: usize,
}
impl ByteIter {
fn next(&mut self) -> Option<&u8> {
if self.index >= self.vec.len() {
None
} else {
let byte = &self.vec[self.index];
self.index += 1;
Some(byte)
}
}
}
参照を持たなくなったので一見すると有利になっているように見えるけど
最初の仕様しか満たせなくなってる!
ところがこれはGATを用いたLending Iteratorでは当たり前の仕様なんだよ
つまり制限された間違った仕様というよりは別の仕様と捉えることもできるんじゃないかな
相違点以外は元コードと同じ名前と形で書いています
struct ByteIter {
vec: Vec<u8>,
index: usize,
}
impl ByteIter {
fn next(&mut self) -> Option<&u8> {
if self.index >= self.vec.len() {
None
} else {
let byte = &self.vec[self.index];
self.index += 1;
Some(byte)
}
}
}
参照を持たなくなったので一見すると有利になっているように見えるけど
最初の仕様しか満たせなくなってる!
ところがこれはGATを用いたLending Iteratorでは当たり前の仕様なんだよ
つまり制限された間違った仕様というよりは別の仕様と捉えることもできるんじゃないかな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【プロ野球】巨人 オコエ瑠偉外野手が自由契約 [あずささん★]
- 【滋賀】不良グループのメンバーの「タイマン」で17歳が重体 殺人未遂容疑で岐阜市の19歳を逮捕 頭蓋骨骨折や脳挫傷、急性硬膜下血腫… [ぐれ★]
- 東京で年収1000万世帯は負け組か?地方の「イオンで楽しそうな家族👨‍👧‍👦」がまぶしく見える★2 [パンナ・コッタ★]
- 今後50年間、毎年100万人ずつ人口が減る…「少子化対策」の失敗で日本が迎える「死ぬまで搾取」というヤバい未来 ★2 [ぐれ★]
- 【芸能】長嶋一茂 高層ビル住民にパラシュートのススメ 香港火災を例に「理性を最後まで失わずに対処できる…」★2 [冬月記者★]
- 【速報】立花孝志容疑者、起訴 ★3 [おっさん友の会★]
- 【高市悲報】経団連会長、政府が話にならないので中国大使と直接会談🥺経済交流の重要性訴える [359965264]
- 【画像】夫に買い物を頼む妻、有能すぎるwwwwwwwwwwwwwwwwww [242521385]
- 【悲報】パンダ🐼の赤ちゃんの動画見て"子育てごっこ"してる、誰も助けてくれない社会の末路がこれだよ [904880432]
- 【速報】オコエ自由契約
- 実家で働いてたおじさんを指す言葉ってないの?
- なんとかペイはもういいて
