Я хочу клонировать head
, что Box<Node<T>>
:
let mut node = Some((*head).clone());
Вот полный код ( детская площадка ):
use std::boxed::Box;
pub struct List<T> {
pub head: Option<Box<Node<T>>>,
pub size: u64,
}
impl<T> List<T> {
pub fn new() -> List<T> {
return List {
head: Option::None,
size: 0,
};
}
pub fn push_back(&mut self, data: T) {
match &self.head {
Some(head) => {
let mut node = Some((*head).clone());
while (*(node).unwrap()).next.is_some() {
node = (*node.unwrap()).next;
}
node.unwrap().next = Some(Box::new(Node::new(data)));
}
None => {
self.head = Some(Box::new(Node::new(data)));
}
}
}
}
#[derive(Clone)]
pub struct Node<T> {
pub next: Option<Box<Node<T>>>,
pub value: T,
}
impl<T> Node<T> {
pub fn new(v: T) -> Node<T> {
Node {
next: Option::None,
value: v,
}
}
}
Компилятор продолжает утверждать, что метод clone
существует, но следующие границы признаков не были выполнены:
error[E0599]: no method named `clone` found for type `std::boxed::Box<Node<T>>` in the current scope
--> src/lib.rs:19:45
|
19 | let mut node = Some((*head).clone());
| ^^^^^
|
= note: the method `clone` exists but the following trait bounds were not satisfied:
`Node<T> : std::clone::Clone`
`std::boxed::Box<Node<T>> : std::clone::Clone`
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following trait defines an item `clone`, perhaps you need to implement it:
candidate #1: `std::clone::Clone`
Я пытался добавить #[derive(Clone)]
, но он все еще не работает:
#[derive(Clone)]
pub struct Node<T> {
pub next: Option<Box<Node<T>>>,
pub value: T
}
Как я могу это сделать?