我正在深入学习Rust,特别是优雅地处理错误,但是我在类型推断方面遇到了一些问题。
extern crate mysql;
use mysql as my;
fn main() {
my_test();
}
fn my_test() -> Result<(), my::Error> {
let pool = try!(my::Pool::new(""));
let res = try!(pool.prep_exec("select 1 as count", ()));
for rows in res {
let row: my::Row = try!(rows);
match row.take("count") {
None => (),
Some(i) => println!("{:?}", i),
};
}
Ok(())
}
这导致了以下错误:
src/bin/main.rs:86:12: 86:13 错误:无法推断出关于
_
的足够类型信息;需要类型注释或泛型参数绑定 [E0282]
不幸的是,该包中的文档经常使用 unwrap
,这并没有帮助我。在 Haskell 中,我会做类似于 println!("{:?}", i :: i32)
的事情,但我无法弄清楚如何在 Rust 中实现它。我尝试了各种方法来转换 row.take
,但都没有成功。如果有更符合惯用法的方式,我很乐意看到代码的多种结构。
println!
,它可以接受各种值。如果您在某些上下文中使用i
值来限制类型(例如通过将其传递给函数),则可以推断出类型。 - Shepmaster