2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2017-11-26
  • 本文字数:710 字

    阅读完需:约 2 分钟

为了简化 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

2017-11-26 18:001820
用户头像

发布了 1008 篇内容, 共 441.8 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

安全领导力| GitLab 持续位列 Gartner AST 魔力象限

极狐GitLab

安全

SAP 电商云启用 Enterprise Product Development Visualization Integration 的配置步骤

汪子熙

angular 电商 SAP commerce 5月月更

千人千面工作台,轻松定制你的移动业务场景

BeeWorks

限时免费!六位袋鼠云数栈资深产品专家带来《数智赋能实战六讲》,欢迎报名

袋鼠云数栈

数据中台 大数据 开源

导航网站合集 | 你想要的资源它都有

小炮

ChunJun支持异构数据源DDL转换与自动执行 丨DTMO 02期回顾(内含课程回放+课件)

袋鼠云数栈

大数据

超级全面的设计类网址导航

小炮

七、高可用之故障演练

穿过生命散发芬芳

故障演练 5月月更 高可用设计

Java 基础语法

源字节1号

软件开发 前端开发 Java后端 小程序开发

《对线面试官》Java泛型

Java3y

Java 程序员 编程语言 java 5月月更

五年谷歌ML Infra生涯,我学到最重要的3个教训

OneFlow

机器学习 深度学习 深度学习框架 MLOps Data Infra

福昕软件:用PDF辅助技术弥合阅读障碍者的数字鸿沟

联营汇聚

web前端培训项目的 Vite 迁移实践分析

@零度

前端开发 vite

STM32+华为云IOT设计的动态密码锁

DS小龙哥

5月月更

【高并发】ThreadLocal学会了这些,你也能和面试官扯皮了!

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

BI系统打包Docker镜像及容器化部署的具体实现

葡萄城技术团队

Docker 数据分析 BI BI 分析工具

数据大屏,仅仅是数据展示吗?

葡萄城技术团队

数据分析 BI 数据可视化 数据大屏 BI分析

Java并发机制的底层实现原理

急需上岸的小谢

5月月更

【刷题第一天】蜡烛之间的盘子

白日梦

5月月更

IDC Panel:智能运维在金融行业中的场景化应用

BizSeer必示科技

OceanBase 源码解读(十):一号表及其服务寻址

OceanBase 数据库

oceanbase 源码解读

官宣|Apache Flink 1.15 发布公告

Apache Flink

大数据 flink 编程 流计算 实时计算

一文带你了解 「图数据库」Nebula 的存储设计和思考

NebulaGraph

数据存储 图数据库

火山引擎推出基于全新视角的 Web 端性能监控方案

字节跳动终端技术

字节跳动 Web 性能监控 火山引擎

面试突击45:为什么要用读写锁?它有什么优点?

王磊

Java 面试

轻量迅捷时代,Vite 与Webpack 谁赢谁输

葡萄城技术团队

前端 vite webpack 轮子

python处理excel文件,python xlsxwriter 一文初掌握

梦想橡皮擦

5月月更

面试中被问到最多的 19 个 JavaScript 问题

海拥(haiyong.site)

JavaScript 5月月更

Docker下的Spring Cloud三部曲之二:细说Spring Cloud开发

程序员欣宸

Java spring-cloud 5月月更

养殖场新来了个“AI管家”

华为云开发者联盟

hilens ModelArts Pro 养殖场 AI摄像头 天视通

[Day38]-[二叉树]-二叉树的右视图

方勇(gopher)

LeetCode 二叉树 数据结构算法

Rust 1.22将?操作符扩展到Option类型_语言 & 开发_Sergio De Simone_InfoQ精选文章