关联引用类型为值类型

时间:2017-09-02 03:17:43

标签: rust traits associated-types rust-diesel

这是trait found in Diesel

trait Identifiable {
    type Id;
    ...
}

这是一个派生impl为Identifiable的用户模型。

#[derive(Identifiable)]
pub struct User {
    id: i32,
    first_name: String,
    last_name: String,
}

根据文档,可识别的实现是在结构的引用上导出的,即在&User上。 这是在find上定义id的{​​{1}}的特征。用户的实现如下。

Identifiable

trait Find<'a>: Sized where &'a Self: Identifiable, Self: 'a, { fn find(id: <&'a Self as Identifiable>::Id) -> Result<Self, MyError>; } Find的impl。

User

编译错误:

impl<'a> Find<'a> for User {
    fn find(id: i32) -> Result<User, MyError> {
        let conn = ::establish_conn()?;
        Ok(users::table.find(id).get_result(&conn)?)
    }
} 

由于我希望找到 fn find(id: i32) -> Result<Self> { ^^^ expected &i32, found i32 的用户,因此impl i32会将ID称为<&'a Self as Identifiable>::Id。 我只希望&i32是一个值而不是引用类型。

如果id应用于引用类型id,如何将findIdentifiable的类型定义为值类型?

0 个答案:

没有答案