我有这样的代码,我需要在两个单独的哈希映射中插入一些东西。我只想要实现Clone的泛型类型。
use std::collections::HashMap;
use std::clone::Clone;
pub struct Something<A, B> {
hm1: HashMap<usize, B>,
hm2: HashMap<usize, B>,
other: A,
}
impl<A, B> Something<A, B>
where B: Clone
{
fn add_to_both_hm(&mut self, x: usize, y: usize, weight: B) {
self.hm1.insert(x, weight.Clone());
self.hm2.insert(y, weight);
}
}
但是在编译时,编译器会抱怨error: no method named 'Clone' found for type 'B' in the current scope
。
即使我指定where B: Clone
,为什么它仍然出错?我该如何解决这个问题?
答案 0 :(得分:2)
两个可能的答案:
该方法名为clone
,小写c
。 Rust是一种区分大小写的语言。
Clone
不是一种方法,它是一种特质。特征的名称与它可能定义的任何方法的名称无关。在Clone
的情况下,它定义了用于实现类型的方法clone
。
两种情况下的解决方案都很简单:改为编写weight.clone()
。