公式
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では当たり前の仕様なんだよ
つまり制限された間違った仕様というよりは別の仕様と捉えることもできるんじゃないかな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国通ジャーナリスト「高市首相が反省、撤回必要ない…こういう外交待っていた」「日本のレッドラインを明確に示した」 [お断り★]
- 芸能界ケンカ最強番付を発表「リングなら岡田准一」 横浜流星&新田真剣佑の名前も 1番強いのは誰か [牛丼★]
- 「報道特集」山本恵里伽アナ、日中緊張で「当たり前のことがはっきり言いづらい空気…ショック」 [首都圏の虎★]
- 【イオン】中国湖南省に新大型店を開業 混乱なく地元客でにぎわい モール内にユニクロや無印良品★3 [1ゲットロボ★]
- 落ち度はゼレンスキー氏に 内政混乱、市民怒り [蚤の市★]
- 朝倉未来、BDで激昂…自ら詰め寄り「やってやろうか?」 ネット「ここまでブチギレるってヤバイだろ」 [jinjin★]
- 〓たかせん〓
- とらせん IP
- 巨専】 ★3
- 競輪実況★1614 性病ヤリマン安東乞食
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1811
- 【DAZN/ABEMA】ブンデスリーガ・DFBポカール★6
- 【実況】博衣こよりのえちえちラムベガス🧪★4
- 【実況】博衣こよりのえちえちラムベガス🧪★5
- 高市早苗に3,000万円の献金を渡した団体、限界突破wwwwwwwwwwwwwwwwwwwwwwww [329329848]
- 🏡
- 井川意高「台湾騒動で最も醜悪醜怪に見えることは普段平和だ人権だと叫んでいる連中が裁国家の側の味方をしてる😲 [861717324]
- TBS山本恵里伽アナ「当たり前のことをハッキリ言いづらい空気、ショック」高市発言騒動に関連して [369521721]
