私は、次のような定義があります自分の構造体のためにPartialEqをVectorに実装するには?
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);
}
}
しかし、私は次のように、一致式を使用How can I implement PartialEq?
に記述のように、私はこのタイプの#[derive(PartialEq)]
の同等になるだろう
pub struct List<T> {
memory: Vec<T>,
}
をコンパイラは私にこれらのエラーを与える:
0123それが重要な理由エラー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]
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]);
をコンパイル生成
main.rsは、私は理解していません。なぜそれはそのタイプを見ているのですか?
コードは私のためにコンパイルされること。あなたは、そのエラーをスローする完全なファイルを投稿できますか? main.rsで – Dogbert
を更新すると、そのエラーがスローされます。 – LeMoussel
'List'は '[T;]に匹敵しますか? 4] '同様に? 'List 'の 'PartialEq >'を 'List 'と 'List 'としか比較できないように実装していることに注意してください) –
Dogbert