BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Rust 1.22将?操作符扩展到Option类型

| 作者 Sergio De Simone 关注 12 他的粉丝 ,译者 谢丽 关注 9 他的粉丝 发布于 2017年11月27日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

为了简化Option类型的处理,最新版本的Rust允许在Option类型上使用?操作符了。此外,该版本还改进了macOS版本编译器性能和调用栈。

操作符是Rust 1.13为简化Result<T, E>处理而引入的。之前,开发人员可以使用模式匹配或者try!操作符处理结果:

let result = foo();
let mut result = match result {
        Ok(val) => val,
        Err(e) => return Err(e),
}

// 或者选用try!操作符
let mut result = try!(foo());

?操作符使下面这种简单许多的语法变得合法:

let mut result = foo()?;
foo()?.bar()?.baz()?

类似的,开发人员现在可以使用下面的语法

fn func_returning_option(...)
    let val = func_returning_option(...)?

代替

match func_returning_option(...) {
        None => ... ,
        Some(val) => ...
    }

该版本对Rust语言语法的另外一项扩展是允许开发人员编写下面这样的代码:

let mut x = 2;
let y = &8;

// 在Rust之前的版本中可以写成:x += *y
x += y;

该版本改进了libbacktrace库的macOS版本,提供了文件名和行号,之前只有macOS上的调用栈上没有。这是通过使用dladdr代替_NSGetExecutablePath实现的。

Rustdoc新增了compile-fail测试,亦即,如果编译器无法编译特定的语句,测试就成功。例如,开发人员现在可以定义:

/// ```compile_fail
/// let x = 5;
/// x += 2; // 不应该编译!
/// ```

Rustdoc测试是为了保证文档中测试的即时性和正确性。

在工具方面,调试编译时间得到了改进,不过,Rust团队没有提供有关这项改进的任何具体数值。

最后,Rust 1.22将许多API固化了下来。要了解详细信息,请查看发布说明

查看英文原文Rust 1.22 Extends the ? Operator to Option Types

2or to Option Types

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

文中的?应该使用半角字符吧 by wang heng

文章中,标题用的是全角的?,正文里又包含?同时也包含?,应该是统一使用半角的?才合理吧

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

深度内容

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT