🙏
[Rustのデザインパターン学習] Fold [生成]
はじめに
上記Foldパターンの解説記事より学習内容を記載します
内容
-
See alsoセクションより
-
std::iter::Iterator
にfold()
メソッドがありますがFoldパターンではない -
map()
メソッドがFoldパターンに近い
-
fold()
map()
-
Motivationセクションより
- 単純なデータ構造に対する単純な操作であれば
map()
を使って行うことができる -
より複雑な操作の場合はFoldパターンを使うのが適切である
- ex)
- 前のノードが後のノードの操作に影響を与える
- データ構造に対する反復処理が自明でない
- ex)
- 単純なデータ構造に対する単純な操作であれば
コード例
-
map()
メソッドを使う場合fn example_map(){ let arr = [1, 2, 3]; //各値を2倍した配列を作成 let iter:Vec<i32> = arr.iter().map(|x| 2 * x).collect(); println!("{:?}",iter); } fn main (){ example_map(); }
実行結果[2, 4, 6]
-
Foldパターンを使う場合
fn main (){ todo!() }
状況
参考リンク
The Rust patterns bookではVisitorパターンとFoldパターンが似ていると言及しているがそれは不適切ではないか?と言及
Foldパターンの理解が難しい件について
Discussion