1

すべてが特性を実装する構造体の VecDeque を作成しようとしていますAnimal' staticこのコードは機能しますが、追加すると修正される理由と、代わりに使用する方法がわかりません'a

pub trait Animal {
    fn says(self) -> Option<String>;
}

use std::collections::VecDeque;

pub struct Zoo {
    list: VecDeque<Box<dyn Animal>>,
}

impl Zoo {
    pub fn new() -> Zoo {
        Zoo {
            list: VecDeque::new(),
        }
    }

    pub fn add<T>(&mut self, animal: T)
    where
        T: Animal + 'static,
    {
        self.list.push_back(Box::new(animal));
    }
}

2 つの質問:

  1. 誰かが'a適切に使用する方法と、これがどのように機能するか/それが何を意味するかを説明してもらえますか? また、なぜここでライフタイムが必要なのだと思いますか (Box を使用しているからでしょうか)。
  2. #[path="..."]また、それがないとファイルを移動するように求められるので、なぜ使用しなければならないのか混乱していますsrc/lib/animal.rsが、移動しても機能しません。
4

1 に答える 1