Bri*_* Oh 4 sqlite rust rust-0.8
linuxfood为sqlite3创建了绑定,我很感激.我刚刚开始学习Rust(0.8),我正在努力理解这段代码到底在做什么:
extern mod sqlite;
fn db() {
let database =
match sqlite::open("test.db") {
Ok(db) => db,
Err(e) => {
println(fmt!("Error opening test.db: %?", e));
return;
}
};
Run Code Online (Sandbox Code Playgroud)
我基本上了解它在做什么.它试图获取数据库连接并测试错误.我不明白它是如何做到的.
为了更好地理解它,我想在没有match声明的情况下重写它,但我没有这方面的知识.那可能吗?是否sqlite::open()返回两个变量,或只有一个?
如果没有match声明,这个例子如何以不同的方式写出来 我不是说这是必要或可取的,但它可以帮助我学习语言.
outer语句是一个赋值,用于指定匹配表达式的值database.匹配表达依赖于的返回值sqlite::open,这可能是类型的Result<T, E>(具有变体枚举Ok(T)和Err(E)).如果是这样的话Ok,枚举变量有一个参数,匹配表达式将其构造db并传回该值(因此它被赋值给变量database).如果是这样的话Err,枚举变体有一个带有错误对象的参数,该参数被打印并且函数返回.
如果不使用匹配语句,可以像下面那样编写(只是因为你明确要求不使用匹配 - 大多数人都会考虑这种糟糕的编码风格):
let res = sqlite::open("test.db");
if res.is_err() {
println!("Error opening test.db: {:?}", res.unwrap_err());
return;
}
let database = res.unwrap();
Run Code Online (Sandbox Code Playgroud)
我只是在学习Rust,但这是解决这个问题的另一种方法.
if let Ok(database) = sqlite::open("test.db") {
// Handle success case
} else {
// Handle error case
}
Run Code Online (Sandbox Code Playgroud)
请参阅有关的文档if let.
| 归档时间: |
|
| 查看次数: |
1753 次 |
| 最近记录: |