每行代码都可以看成一个语句
声明语句:定义结构体,函数,引入模块,赋值等。
流程控制语句:if match 循环。
表达式语句: 专门用来产生值的一种构造式。
宏语句:文本替换 或者 生成指定代码。
Rust语法骨架
分解代码 最终格式
#![...]//属性
...;
...{
...;
}
...{#块分隔符
...;
...
}
...{
...;#行分割符号
...;
}
- 属性 , 类似#![…]
- 分号 “ ; “ 行分割符号
- 花括号 {…} ,块分隔符
表达式
分号表达式
既然是表达式都可以产生值
rust中分号表达式会产生一个 单元类型的值 (unit type)
;-> ()
分号表达式:在块表达式的最后一行才会求值
fn main(){
let x = 10;
x;
}
块表达式
可以包含很多行语句
块表达式的返回值是最后一行
求值规则
1.分号表达式返回值永远为自身的单元(unit)类型:【()】
2.分号表达式只有在块表达式的最后一行才会求值,其他时候只作为连接符存在。 也叫语句。
3.块表达式只对其最后一行表达式进行求值。
fn main() { //1.本身就是一个块表达式 返回单元类型
;
;
{
()
}
{
();
use std::vec::Vec; //6 .这个分号就代码会返回 单元类型的返回值
}
();
&{ ; };//->&()
//7 返回一个单元值的引用 但是不能直接写&() 因为并不满足规则 只能这样来满足目标
; // ->()
;//2.在块表示式中 最后一行表达式会返回值 这里是个单元类型() 这是main函数的返回值
//3.在最后一个分号表达式之前 上方所有的分号 都是连接符的存在
//4 在main函数中 行代码由分号来分割 多行代码组成的块 由块代码分割
//5函数体内 块表达式体内 也遵循上述规则
}
在其他教材中 可以分为表达式和语句
这样划分可以把每一个带分号的代码 叫做语句 因为单元值本身是没有意义的
把不带分号的叫做 表达式
表达式:块中最后一行不加分号的表达式
除了基本的声明语句之外 use ,let
都是表达式
因为都是表达式 所以没有二元运算符的语句。
一切皆表达式 表达式是有返回值的 返回值就有类型
一切皆类型
来保证安全