指定的泛型类型实现Clone但类型没有克隆方法

时间:2016-12-18 07:27:44

标签: rust

我有这样的代码,我需要在两个单独的哈希映射中插入一些东西。我只想要实现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,为什么它仍然出错?我该如何解决这个问题?

The rust playground is here

1 个答案:

答案 0 :(得分:2)

两个可能的答案:

  1. 该方法名为clone,小写c。 Rust是一种区分大小写的语言。

  2. Clone不是一种方法,它是一种特质。特征的名称与它可能定义的任何方法的名称无关。在Clone的情况下,它定义了用于实现类型的方法clone

  3. 两种情况下的解决方案都很简单:改为编写weight.clone()