ではこの>>76の構造体MyIterのnext()は誰がいつ呼ぶのでしょう?
ここではメソッドチェーンになっているので後続のイテレータが呼びます
具体的には>>75で v.my_iter().my_print(); でしたからmy_print()が呼び出します
そこで関数my_print()の定義です
今回もtraitの部分はおまじないと思って無視していいです
trait MyPrint {
fn my_print(&mut self);
}
下記で任意のイテレータに対して関数my_print()を実装(impl)します
そのためこの部分だけはジェネリック指定『<I: Iterator>』のコードをご容赦ください
後ろのwhere以降の std::fmt::Display は表示を許可するためのおまじないと思ってください
impl<I: Iterator> MyPrint for I
where I::Item: std::fmt::Display
{
fn my_print(&mut self) {
while let Some(val) = self.next() {
println!("{}", val);
}
}
}
ここでmy_print()のselfというのはここでimpl対象=先行するイテレータすなわちMyIterになります
もちろんMyIter以外の別のイテレータに対してもこのmy_print()は機能します
今回の使い方ではselfは構造体MyIterになりますから
whileのところにあるself.next()も先程定義したMyIterのnext()になります
next()の返り値が Some である限りprintln!で表示して None になるとwhileを抜けて終了です
以上で冒頭の以下の例の全てコードが実装されましたので動きます
fn main() {
let v = vec![5, 6, 7, 8, 9];
v.my_iter().my_print();
}
探検
C vs C++ vs Rust Part.2
■ このスレッドは過去ログ倉庫に格納されています
2021/12/17(金) 23:24:42.83ID:M1BnXuWN
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【米FRB】0.25%利下げ決定 3会合連続、雇用下支え [蚤の市★]
- 訪米認証「ESTA」、SNS利用情報の提出義務化へ 日本人観光客も対象に [蚤の市★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 「身を切る改革」どこへ? 維新「身内」への公金支出、地方でも続々 [蚤の市★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【悲報】俺たちの国民民主党、高市総理の補正予算賛成へwへwwwwwwwwwwwお米券確定wwwwww [257926174]
- 福井県民の最大の罪は俺を神奈川に放流しちゃったこと
- ゲッダン
- 【朗報】VTuber、とうとうスパロボに参戦する
- 高橋洋一、終わる [523957489]
- 毎日菊花茶飲んでたら美肌になったよ
