Rust 程序设计(第 2 版)
Jim Blandy, Jason Orendorff, Leonora F. S. Tindall
软件工程师
1469 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
课程目录
已完结/共 41 讲
时长 02:41
时长 06:30
时长 10:04
时长 01:05
时长 50:06
时长 31:35
时长 34:39
时长 29:11
时长 37:15
时长 23:44
时长 44:19
时长 29:54
时长 39:01
时长 01:38
时长 01:15
时长 00:37
Rust 程序设计(第 2 版)
15
15
1.0x
00:00/00:00
登录|注册

第 6 章 表达式

LISP 程序员知道一切的价值(value),但不了解其代价。
——Alan Perlis,警句 #55
本章将介绍 Rust 表达式,它是函数体的组成部分,因而也是大部分 Rust 代码的组成部分。Rust 中的大多数内容是表达式。本章将探索表达式的强大功能以及如何克服它的局限性。我们将介绍在 Rust 中完全面向表达式的控制流,以及 Rust 的基础运算符如何独立工作和组合工作。
某些概念(比如闭包和迭代器)严格来说也属于这一类,但略显深奥,我们稍后将用单独的一章来介绍它们。目前,我们的目标是在这“区区几页”中涵盖尽可能多的语法。

6.1 表达式语言

Rust 乍看起来和 C 家族的语言相似,但这只是假象。在 C 语言中,表达式和语句之间有明显的区别,表达式看起来是这样的:
5 * (fahr-32) / 9
语句看起来更像这样:
for (; begin != end; ++begin) {
if (*begin == target)
break;
}
表达式有值,而语句没有。
Rust 是所谓的表达式语言。这意味着它遵循更古老的传统,可以追溯到 Lisp,在 Lisp 中,表达式能完成所有工作。
在 C 中,ifswitch 是语句,它们不生成值,也不能在表达式中间使用。而在 Rust 中,ifmatch 可以生成值。第 2 章介绍过一个生成数值的 match 表达式:
pixels[r * bounds.0 + c] =
match escapes(Complex { re: point.0, im: point.1 }, 255) {
None => 0,
Some(count) => 255 - count as u8
};
if 表达式可用于初始化变量:
let status =
if cpu.temperature <= MAX_TEMP {
HttpStatus::Ok
} else {
HttpStatus::ServerError // 服务程序出错了
};
match 表达式可以作为参数传给函数或宏:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Rust语言中的表达式语法,强调了Rust作为一种表达式语言与传统的C语言的不同之处。文章详细介绍了Rust中各种类型的表达式,包括控制流工具(如if、match、for、while等)都是表达式,能够生成值。此外,还介绍了宏调用、路径、结构体字面量、函数调用等其他类型的表达式。文章还强调了Rust中的表达式具有不同的优先级和结合性,以及表达式的链式书写规则。此外,文章还介绍了块与分号的用法,以及声明的相关内容。另外,文章还介绍了Rust中的发散函数和类型推断的特点。总的来说,通过介绍Rust中的表达式语法,展示了Rust的强大功能和与传统语言的不同之处。文章还涉及了Rust的算术运算符、按位运算符、比较运算符和逻辑运算符,以及赋值和类型转换等内容。文章内容丰富,适合想要深入了解Rust语法特点的读者阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部