「Rust」1 变量和基本类型
变量与可变性
Rust中的变量默认是不可变的,但可以在变量名前添加mut
使变量可变
fn main(){
let mut x = 1;
x = 2;
}
常量
- 不能对常量使用
mut
,它总是不能变 - 声明使用
const
关键字,并注明值的类型 - 只能设置为常量表达式,不能是在运算时出现的值
const THREE_HOURS_IN_SECONDS: u32 = 60*60*3;
隐藏
rust允许定义一个与之前变量名相同的新变量,第一个变量就会被隐藏
//okk 不必使用不同的名字
let spaces = " ";
let spaces = spaces.len();
//err 不能改变变量的类型
let mut spaces = " ";
spaces = spaces.len();
基本类型
- 标量(scalar)
- 复合(compound)
数值类型
整型
长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
- 有符号数可以存储$-(2^{n-1})$到$2^{n-1}-1$ 之间的数
- 无符号数可以存储0到$2^n-1$ 之间的数
isize
和usize
依赖运行的计算机架构
rust允许使用_
来作为分隔符(增加可读性),如98_220
,可以使用32_i32
- !
--release
时,不检测整型溢出
浮点型
f32
和f64
和C一样,在浮点数的计算上要注意精度误差
NaN
未定义的结果(可以使用is_nan()
方法判断)
序列
用以生成连续的数值,如 1..5
相当于 1..=4
for i in 'A'..='Z' {
println!("{}",i);
}
有理数和复数
使用 num
库
use num::complex::Complex;
fn main(){
let a = Complex{re:2.1,im:-1.2};
let b = Complex::new(1)
}
总结
- 类型转换一定是显式的
- 数值可以使用方法:如
.round()
字符、布尔、单元类型
字符类型(char)
Unicode
值,占用四个字节
字符只能用 ''
表示,""
表示字符串
布尔(bool)
一个字节 true
和 false
单元类型
就是 ()
,比如main
函数的返回值,它并不是没有返回值的发散函数
和 Go 语言的 struct{}
类似,占位但不占用内存
语句和表达式
fn add_with_extra(x:i32, y:i32)->i32{
let x = x + 1;//语句
let y = y + 1;//语句
x + y//表达式
}
语句完成一个动作,但并没有返回值
而表达式会返回值,表达式没有分号
fn main(){
let y = {
let x = 3;
x + 1
};//花括号里的语句块是一个表达式
println!("y = {}", y);
}
函数
函数名和变量名使用 蛇形命名法
函数的位置可以随便放
每个函数参数都需要标注类型
函数可以使用
return
提前返回函数没有返回值或者是以
;
结尾的表达式,会返回()
类型!
作为返回值表示永不返回,常用崩溃函数fn dead_end()->!{ panic!("c'est fini!"); }