У меня есть следующее определение:Как реализовать PartialEq для вектора для моих собственных структур?
pub struct List<T> {
memory: Vec<T>,
}
я хотел бы получить эквивалент #[derive(PartialEq)]
для такого типа, как описывают в How can I implement PartialEq?
Я использую выражение матч, как:
impl<T: PartialEq> PartialEq for List<T> {
fn eq(&self, other: &List<T>) -> bool {
self.memory == other.memory
}
}
impl<T: fmt::Debug> fmt::Debug for List<T> where T:Display {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
try!(write!(f, "["));
for (count, v) in self.memory.iter().enumerate() {
if count != 0 { try!(write!(f, ", ")); }
try!(write!(f, "{}", v));
}
write!(f, "]")
}
}
impl<T> List<T> {
pub fn new() -> Self {
List {
memory: Vec::new(),
}
}
// push() add to end of list
pub fn push(&mut self, value: T) {
self.memory.push(value);
}
}
Но компилятор дает мне следующие ошибки:
error: mismatched types [E0308]
if ! (* left_val == * right_val) {
note: in this expansion of assert_eq!
help: run
rustc --explain E0308
to see a detailed explanationnote: expected type
librusty_data_structures::List<u32>
note: found type
[_; 4]
main.rs, которые производят ошибки компиляции
let mut listex: List<u32> = List::new();
listex.push(17);
listex.push(18);
listex.push(19);
listex.push(20);
assert_eq!(listex, [17, 18, 19, 20]);
Я не понимаю, почему это важно. Почему он даже смотрит на этот тип?
Этот код компилирует для меня. Можете ли вы опубликовать полный файл, который выдает эту ошибку? – Dogbert
, обновленный с помощью main.rs, выдает эту ошибку. – LeMoussel
Вы хотите 'List' сопоставим с '[T; 4] 'также? (Обратите внимание, что вы внедрили 'PartialEq >' для 'List ', поэтому вы можете сравнивать 'List ' с 'List '.) –
Dogbert