相关疑难解决方法(0)

可以定义泛型闭包吗?

Rust是否支持使用泛型返回类型的闭包?例如,我想写这样的东西:

let get<T: FromValue> = |s: &str| -> Option<T> { ... }
Run Code Online (Sandbox Code Playgroud)

但这种语法显然是错误的.

我想做什么

我正在使用rust-mysql-simple,我正在from_row为我的Userstruct 编写一个方法,从数据库行构建一个用户.

该库不提供(据我所知)一种按列名查找查询结果行值的方法.所以要解决这个问题,我的方法看起来像(这个编译并正常工作):

fn from_row(result: &QueryResult, row: Vec<Value>) -> User {

    let mut map: HashMap<_, _> = row.into_iter().enumerate().collect();

    let mut get = |s: &str|  {
        result.column_index(s)
           .and_then(|i| map.remove(&i) )
    };

    User {
        id: get("id").and_then(|x| from_value_opt(x).ok() )
    }
}
Run Code Online (Sandbox Code Playgroud)

result是一个对象,它包含有关查询列名的信息(用于查找列名的列索引),并row包含查询结果行中的有序值.from_value_opt是一个由库提供的方法,它接受Value并返回一个Result<T, MyError>.该值被强制转换为字段的类型.

我试图移动.and_then(|x| from_value_opt(x).ok() )get关闭只是为了清理代码一些.但是,当我这样做时,闭包返回类型被解释为第一次出现get调用的结果.

我将闭包重写为嵌套方法,如下所示: …

rust

13
推荐指数
2
解决办法
2916
查看次数

标签 统计

rust ×1