>>71
Rustの各イテレータメソッドは全て各々の固有の構造体(struct)を返すだけです
アセンブリコードはスタック上に確保された構造体の大きさの領域にその値が入ることになるでしょう
そしてその構造体に対してnext()という関数が実装されています
後続の別のイテレータが自分に対してそのnext()を呼び出すことになります
そして他からnext()を呼ばれた側は自分の構造体のデータを利用して値を返します
これらのアセンブリコードは普通の関数呼び出しと同じでしょう
具体例を見たほうが早いと思います
例えばもう少し簡単な以下の例を動かしましょう
fn main() {
let v = vec![5, 6, 7, 8, 9];
v.my_iter().my_print();
}
このベクタvに対してmy_iter()さらにmy_print()とチェーンになっている例で説明します
多くの場合はライブラリにあるイテレータを使うので自分で実装しなくていいのですが
アセンブリコードが気になる(=どう動作しているの?)とのことなのでゼロから実装します
このmy_iter()も構造体を返すだけの関数です
ここでは説明をわかりやすくするためジェネリックでなく
具体的な型『Vec<i32>』(符号付き32bit整数のベクタ)に対してmy_iter()を実装します
まずmy_iter()が返す構造体を定義します
struct MyIter {
vec: Vec<i32>,
index: usize,
}
ベクタの値を次々と返していけるようにベクタとそのインデックスを保有します
変数名と型の位置がC言語とRustでは逆なだけでわかると思います
インデックスのための型『usize』は符号なし整数です
探検
C vs C++ vs Rust Part.2
■ このスレッドは過去ログ倉庫に格納されています
2021/12/17(金) 23:16:23.03ID:M1BnXuWN
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【米FRB】0.25%利下げ決定 3会合連続、雇用下支え [蚤の市★]
- 訪米認証「ESTA」、SNS利用情報の提出義務化へ 日本人観光客も対象に [蚤の市★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 「身を切る改革」どこへ? 維新「身内」への公金支出、地方でも続々 [蚤の市★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【悲報】俺たちの国民民主党、高市総理の補正予算賛成へwへwwwwwwwwwwwお米券確定wwwwww [257926174]
- 福井県民の最大の罪は俺を神奈川に放流しちゃったこと
- ゲッダン
- 【朗報】VTuber、とうとうスパロボに参戦する
- 高橋洋一、終わる [523957489]
- 毎日菊花茶飲んでたら美肌になったよ
