每行代码都可以看成一个语句

声明语句:定义结构体,函数,引入模块,赋值等。

流程控制语句:if match 循环。

表达式语句: 专门用来产生值的一种构造式。

宏语句:文本替换 或者 生成指定代码。

Rust语法骨架

分解代码 最终格式

  1. #![...]//属性
  2. ...;
  3. ...{
  4. ...;
  5. }
  6. ...{#块分隔符
  7. ...;
  8. ...
  9. }
  10. ...{
  11. ...;#行分割符号
  12. ...;
  13. }
  • 属性 , 类似#![…]
  • 分号 “ ; “ 行分割符号
  • 花括号 {…} ,块分隔符

表达式

分号表达式

既然是表达式都可以产生值

rust中分号表达式会产生一个 单元类型的值 (unit type)

;-> ()

分号表达式:在块表达式的最后一行才会求值

  1. fn main(){
  2. let x = 10;
  3. x;
  4. }

块表达式

可以包含很多行语句

块表达式的返回值是最后一行

求值规则

1.分号表达式返回值永远为自身的单元(unit)类型:【()】

2.分号表达式只有在块表达式的最后一行才会求值,其他时候只作为连接符存在。 也叫语句

3.块表达式只对其最后一行表达式进行求值。

  1. fn main() { //1.本身就是一个块表达式 返回单元类型
  2. ;
  3. ;
  4. {
  5. ()
  6. }
  7. {
  8. ();
  9. use std::vec::Vec; //6 .这个分号就代码会返回 单元类型的返回值
  10. }
  11. ();
  12. &{ ; };//->&()
  13. //7 返回一个单元值的引用 但是不能直接写&() 因为并不满足规则 只能这样来满足目标
  14. ; // ->()
  15. ;//2.在块表示式中 最后一行表达式会返回值 这里是个单元类型() 这是main函数的返回值
  16. //3.在最后一个分号表达式之前 上方所有的分号 都是连接符的存在
  17. //4 在main函数中 行代码由分号来分割 多行代码组成的块 由块代码分割
  18. //5函数体内 块表达式体内 也遵循上述规则
  19. }

在其他教材中 可以分为表达式和语句

这样划分可以把每一个带分号的代码 叫做语句 因为单元值本身是没有意义的

把不带分号的叫做 表达式

表达式:块中最后一行不加分号的表达式


除了基本的声明语句之外 use ,let

都是表达式


因为都是表达式 所以没有二元运算符的语句。


一切皆表达式 表达式是有返回值的 返回值就有类型

一切皆类型

来保证安全