Rust | 1 变量和基本类型

2022-01-05
826字
2分钟

变量与可变性

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$ 之间的数
  • isizeusize 依赖运行的计算机架构

rust允许使用_ 来作为分隔符(增加可读性),如98_220 ,可以使用32_i32

  • ! --release 时,不检测整型溢出

浮点型

  • f32f64

  • 和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)

一个字节 truefalse

单元类型

就是 (),比如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!");
    }
    
Avatar
Zhang.Mathias 巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟