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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |