变量与可变性
- 声明变量使用let 关键字
- 默认情况下,变量是不可变的 (Immutable)
- 声明变量时,在变量前面加上 mut,就可以使变量可变
变量与常量
- 常量 (constant),常量在绑定值以后也是不可变的,但是它与不可变的变量有很多区别:
- 不可以使用 mut,常量永远都是不可变的
- 声明常量使用 const 关键字,它的类型必须被标注
- 常量可以在任何作用域内进行声明,包括全局作用域
- 常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能计算出的值
- 在程序运行期间,常量在其声明的作用域内一直有效
- 命名规范:Rust 里常量使用全大写字母,每个单词之间用下划线分开
Shadowing(隐藏)
- 可以使用相同的名字声明新的变量,新的变量就会 shadow(隐藏)之前声明的同名变量
- 在后续的代码中这个变量名代表的就是新的变量
- shadow 和把变量标记为 mut 是不一样的:
- 如果不使用let 关键字,那么重新给非 mut 的变量赋值会导致编译时错误
- 而使用let 声明的同名新变量,也是不可变的
- 使用 let 声明的同名新变量,它的类型可以与之前不同
数据类型
- 标量和复合类型
- Rust 是静态编译语言,在编译时必须知道所有变量的类型
- 基于使用的值,编译器通常能够推断出它的具体类型
- 但如果可能的类型比较多(例如把 String 转为整数的 prse 方法) ,就必须添加类型的标注,否则编译会报错
标量类型
- 一个标量类型代表一个单个的值
- Rust 有四个主要的标量类型!
- 整数类型
- 浮点类型
- 布尔类型
- 字符类型
整数溢出
- 例如: u8 的范围是0-255,如果你把一个 u8 变量的值设为 256,那么:
- 调试模式下编译:Rust 会检查整数溢出,如果发生溢出,程序在运行时就会 panic
- 发布模式下 (--release) 编译:Rust 不会检查可能导致 panic 的整数溢出。
- 如果溢出发生:Rust 会执行“环绕”操作:
- 256变成0,257 变成1...
- 如果溢出发生:Rust 会执行“环绕”操作:
浮点类型
- Rust 有两种基础的浮点类型,也就是含有小数部分的类型
- f32,32位,单精度
- f64,64位,双精度
- Rust 的浮点类型使用了IEEE-754 标准来表述
- f64 是默认类型,因为在现代 CPU 上f64 和f32 的速度差不多,而且精度更高。
字符类型
- Rust 语言中 char 类型被用来描述语言中最基础的单个字符。
- 字符类型的字面值使用单引号
- 占用 4 字节大小
- 是 Unicode 标量值,可以表示比 ASCII 多得多的字符内容:拼音、中日韩文、零长度空白字符、emoii 表情等。
-U+0000到U+D7FF- U+EO00到U+1FFFF
- 但 Unicode 中并没有“字符”的概念,所以直觉上认为的字符也许 Rust 中的概念并不相符
复合类型
- 复合类型可以将多个值放在一个类型里
- Rust 提供了两种基础的复合类型: 元组 (Tuple ) 、数组
Tuple
- Tuple 可以将多个类型的多个值放在一个类型里。
- Tuple 的长度是固定的:一旦声明就无法改变
创建Tuple
*在小括号里,将值用逗号分开
- Tuple 中的每个位置都对应一个类型,Tuple 中各元素的类型不必相同
获取Tuple的元素值
- 可以使用模式匹配来解构 (destructure)一个 Tuple 来获取元素的值
let tuple = ("1",2,false);
let (x,y,z)=tuple;
访问Tuple的元素
- 在 fuple 变量使用点标记法,后接元素的索引号
数组
- 数组也可以将多个值放在一个类型里
- 数组中每个元素的类型必须相同
- 数组的长度也是固定的
声明一个数组
let arr=[1,2,3,4,5];
数组的用处
- 如果想让你的数据存放在 stack(栈)上而不是 heap(堆)上,或者想保证有固定数量的元素,这时使用数组更有好处
- 数组没有 Vector 灵活 (以后再讲)
- Vector 和数组类似,它由标准库提供
- Vector 的长度可以改变
- 如果你不确定应该用数组还是 Vector,那么估计你应该用 Vector。
函数
函数体中的语句与表达式
- 函数体由一系列语句组成,可选的由一个表达式结束
- Rust 是一个基于表达式的语言
- 语句是执行一些动作的指令
- 表达式会计算产生一个值
- 函数的定义也是语句
- 语句不返回值,所以不可以使用 let 将一个语句赋给一个变量
//表达式赋值
let y={
let x=1;
x+3
};
函数的返回值
- 在 ->符号后边声明函数返回值的类型,但是不可以为返回值命名
- 在 Rust 里面,返回值就是函数体里面最后一个表达式的值
- 若想提前返回,需使用 return 关键字,并指定一个值
- 大多数函数都是默认使用最后一个表达式最为返回值
控制流
if else,else if
let num=if condition {5} else {6};
rust循环
loop,while,for
range
- 标准库提供
*指定一个开始数字和一个结束数字,Range 可以生成它们之间的数字 (不含结束) - rev 方法可以反转 Range
for num in (1..4).rev(){
println!("{}!",num);
}
标签:02,通用,变量,Tuple,编程,let,数组,类型,Rust
From: https://www.cnblogs.com/huiteresa/p/16930364.html