【问题标题】:Specified generic type to implement Clone but type doesn't have Clone method指定泛型类型来实现 Clone 但类型没有 Clone 方法
【发布时间】:2016-12-18 07:27:43
【问题描述】:

我有这样的代码,我需要在两个单独的哈希图中插入一些东西。我只想要实现 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.

【问题讨论】:

  • 方法是clone。 Rust 是一种区分大小写的语言。 编辑:我刚刚意识到您的问题可能是:Clone 不是方法,而是特征,特征的名称与它定义的方法。
  • @DK。你是对的,“克隆”的拼写错误是这里的问题。你能把它写成答案,以便它可以被接受/赞成吗?

标签: rust


【解决方案1】:

两个可能的答案:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2015-12-28
    • 2010-10-27
    相关资源
    最近更新 更多