用于实现获取结构体 id 的特征规范

问题描述 投票:0回答:1

我有一个关于特定特征的定义的问题。基本上我想定义一个特征,它提供一个函数来获取可以识别它的结构的 id (或键)。 但是,我陷入困境,不知道如何定义该特征(或具体实现)。

例如,我有这个结构

Data

#[derive(Debug)]
struct Data{
    id: String,
    value: i32
}

现在假设我想创建一个仅包含单个函数的特征。这个函数应该提供某种类型的密钥(因此是可哈希的,等等):

trait Entity {
    fn get_id<K: Eq + PartialEq + Hash>(&self) -> K;
}

但是当我想实现这个特质时我陷入了困境。例如,我收到以下代码片段的错误消息类型不匹配

impl Entity for Data {
    fn get_id<String>(&self) -> String {
        self.id.clone()
    }
}

我可以做什么来克服这个问题?

rust traits
1个回答
0
投票

您编写它的方式意味着调用者决定类型应该是什么,这似乎不是您想要的。您应该将泛型类型移至特征定义中。

trait Entity<K: Eq + PartialEq + Hash> {
    fn get_id(&self) -> K;
}
impl Entity<String> for Data {
    fn get_id(&self) -> String {
        self.id.clone()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.