加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite – 这个Rust代码可以在没有“匹配”语句的情况下编写吗?

发布时间:2020-12-12 18:59:59 所属栏目:百科 来源:网络整理
导读:linuxfood has created bindings for 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
linuxfood has created bindings for 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;
            }
        };

我基本上了解它在做什么.它试图获取数据库连接并测试错误.我不明白它是如何做到的.

为了更好地理解它,我想在没有匹配语句的情况下重写它,但我没有这方面的知识.那可能吗? sqlite :: open()是返回两个变量,还是只返回一个?

如果没有匹配语句,如何以不同的方式编写此示例?我不是说这是必要或可取的,但它可以帮助我学习语言.

解决方法

outer语句是一个赋值,它将匹配表达式的值赋给数据库.匹配表达式取决于sqlite :: open的返回值,它可能是Result< T,E>类型的类型. (带有变体Ok(T)和Err(E)的枚举).如果它是OK,则枚举变量有一个参数,匹配表达式将其解构为db并传回该值(因此它被分配给变量数据库).如果它是Err,则枚举变体具有带有错误对象的参数,该参数被打印并且函数返回.

如果不使用匹配语句,可以像下面那样编写(只是因为你明确要求不使用匹配 – 大多数人都会考虑这种糟糕的编码风格):

let res = sqlite::open("test.db");
if res.is_err() {
    println!("Error opening test.db: {:?}",res.unwrap_err());
    return;
}
let database = res.unwrap();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读