< 返回版块

imoegirl 发表于 2021-05-27 11:40

在做数据库相关逻辑时,需要建立一个数据库Struct对象,然后插入数据库,整个流程的逻辑是一样的,只是Struct的类型不一样,想抽相成一个函数,想请教一下可否将Struct类型作为参数

fn write_to_db(id: i32, content:String, db_type: Struct类型XXX){
 // 1.获取数据库链接

 // 2.创建数据库对象
 let db_item = Struct类型XXX { id: id, content: content};
 
 // 3.插入数据库
}

大概是这个意思。

评论区

写评论
作者 imoegirl 2021-05-27 19:24

感谢

--
👇
Grobycn: 用泛型

trait Table {
    fn build_entry(id: i32, content: String) -> Self;
}

// 自己写一个 derive 宏, 自动 impl Table
#[derive(Table)]
struct Foo {
    id: i32,
    content: String,
}

fn write_to_db<T: Table>(id: i32, content: String, _: PhantomData<T>) {
    // 1. 获取数据库链接
    
    // 2. 创建数据库对象
    let db_item = T::build_entry(id, content);
    
    // 3. 插入数据库
}
Grobycn 2021-05-27 15:30

用泛型

trait Table {
    fn build_entry(id: i32, content: String) -> Self;
}

// 自己写一个 derive 宏, 自动 impl Table
#[derive(Table)]
struct Foo {
    id: i32,
    content: String,
}

fn write_to_db<T: Table>(id: i32, content: String, _: PhantomData<T>) {
    // 1. 获取数据库链接
    
    // 2. 创建数据库对象
    let db_item = T::build_entry(id, content);
    
    // 3. 插入数据库
}
munpf 2021-05-27 12:04

这个应该是用泛型吧

1 共 3 条评论, 1 页