【六月更文打卡】Rust学习笔记day01

159 阅读3分钟

打印操作由std::fmt里面所定义的一系列宏来处理,包括:

  • format!:将格式化文本输出到 字符串(String)
  • print!:与 format!类似,但将文本输出到控制台
  • println!: 与 print!类似,但输出结果追加一个换行符
titlelinkTitledateweightdescription
Rust的表达式表达式2021-03-291140Rust的表达式

表达式主要用于计算求值。

Rust 编译器在解析代码时:

  • 如果遇到分号,就会继续往后面执行
  • 如果遇到语句,就会执行语句
  • 如果遇到表达式,就会对表达式求值
  • 如果分号后面什么都没有,就会补上单元值()
  • 当遇到函数时,就会将函数体的花括号识别为块表达式。

块表达式是由一对花括号和一系列表达式组成的,它总是返回块中最后一个表达式的值。

位置表达式

位置表达式(Place Expression)一般叫做左值,是表示内存位置的表达式,有以下几类:

  • 本地变量
  • 静态变量
  • 解引用 (* express)
  • 数组索引 (expr[expr])
  • 字段引用 (expr.field)
  • 位置表达式组合

通过位置表达式可以对某个数据单元的内存进行读写。位置表达式可以用于赋值。

值表达式

值表达式(Value Expression)一般叫做右值,值表达式引用了某个存储单元地址中的数据。它相当于数据,只能进行读操作。

从语义角度来说,位置表达式代表了持久性数据,值表达式代表了临时数据。位置表达式一般有持久的状态,值表达式要不是字面量,要不就是表达式求值过程中创建的临时值。

宏类型

Rust中宏大致分为两类:

  • 声明式宏: 它们是使用 macro_rules! 宏创建的,它们提供与调用函数类似的功能,但是很容易通过名称末尾 ! 给予区分。它们是在项目中快速编写小型宏的首选方法。macro_rules!宏可以在项目的任何位置定义。
  • 过程宏: 过程宏是宏的一种高级形式,可以完全控制代码的操作和生成。这些宏没有任何DSL支持,并在某种意义上是程序性的,你必须给定的标记树输入编写如何生成或转换代码的指令。过程宏需要通过将 Cargo.toml文件中的属性设置为 proc-macro=true来生成独立的软件包。

 

过程宏的缺点

过程宏实现起来比较复杂,需要对编译器的内部机制,以及程序如何在编译器的内存中表示有一些了解。

 

macro_rules! 宏的标记类型

 

代码块

如下代码块包含两条语句,分别是 silly; 和 things;

{ sily; things; }

 

expr

匹配任意表达式:

  • 1
  • x + 1
  • if x == 4 { 1 } else { 2 }

元项是在括号内找到的内容。因此,对于前面的每个属性,相应的元项如下所示: