1

这是Diesel 的一个特征

trait Identifiable {
    type Id;
    ...
}

这是一个派生 impl 的 User 模型Identifiable

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

根据文档, Identifiable 的实现是在结构的引用上派生的,即 on &User。这是find在. 用户的实现如下。idIdentifiable

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

Findon a的含义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

因为我想找到一个用户i32,所以 impl<&'a Self as Identifiable>::Id会将 id 称为&i32. 我只想id成为一个值而不是引用类型。

当应用于引用类型时,如何将idon的类型定义find为值类型?Identifiable&User

4

0 回答 0