質問: src .into_iter() .chain(vec![add].into_iter()) .collect::>(); assert_eq!(dst, [1, 2, 3, 4]); ```
回答: まず話の前提として、タイトルに書かれていることと、提示されているコードが異なります。 タイトルでは * 元のVecはimmutable * 元のVecは残し、新たに要素を追加したVecを作成する という意味になっています。 一方で、提示されているコードでは * 元のVecを解体してイテレータにして値を取り出し(into_iter) * イテレータに追加の値を加え(chain) * イテレータを新しいVecにまとめる(collect) という処理になっています。 つまり、提示されているコードでは新たにVecをつくってはいるものの、元のVecは残っていません。 以上を踏まえ、単純化したコードをそれぞれのパターンに対して示します。 【元のVecを残す(タイトル通り)】 ``` let mut dst = src.clone(); dst.push(add); ``` 【元のVecを残さない(提示コード通り)】 ``` let mut dst = src; dst.push(add); ```