やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rust自習(cycle()実装できず)

 Cloneトレイト境界がどうのと怒られる。

成果物

問題: cycle()が使えない

list.iter().cycle()
error[E0277]: the trait bound `Iter<'_, i32>: std::clone::Clone` is not satisfied
   --> src/lib.rs:727:39
    |
727 |         for (i, value) in list.iter().cycle().enumerate() { assert_eq!(*value, expecteds[i]) }
    |                                       ^^^^^ the trait `std::clone::Clone` is not implemented for `Iter<'_, i32>`

ダメだった対処

 コメントアウトしたようなコードに変更してみたがエラーだった。

impl<T> LinkedList<T> {
//impl<T> LinkedList<T> where T: Clone {
//    pub fn iter<T: Clone>(&self) -> Iter<'_, T> {
//    pub fn iter<T>(&self) where T: Clone -> Iter<'_, T> {
    pub fn iter(&self) -> Iter<'_, T> {
        Iter { next: self.head.as_ref().map(|node| &**node) }
    }

所感

 わからん。トレイト境界を足せばいいだけだと思ったが、トレイト境界のこともよく分からん。何がわかっていないかもわからん。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで