rust学习笔记-变量和类型
Posted 柳清风09
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rust学习笔记-变量和类型相关的知识,希望对你有一定的参考价值。
变量
通常一门的语言的变量是没有啥可以说道的,无法就是变量命名规则:以字母、下划线和数字组成,并且数字不能开头,没啥好说的。
但rust的变量奇怪的地方是,
变量不可变
譬如这样一个简单到不能再简单的代码
fn main()
let a =4;
a = 3;
println!("",a)
编译的时候就会报错
3 | a = 3;
| ^^^^^ cannot assign twice to immutable variable
不能二次分配不可变变量,请记住rust的变量不可变。那如何让它可变呢?请使用mut 关键字,
fn main()
let mut a =4;
a = 3;
println!("",a)
上面的的代码虽然可以正常运行,但还是会有有一个warn的警告,提示read前变量值会被覆盖。
| let mut a =4;
| ^^^^^
|
= note: `#[warn(unused_assignments)]` on by default
= help: maybe it is overwritten before being read?
可见,rust对于变量的赋值管理的非常严格。这里还有一个小细节,需要区分赋值和初始化
fn main()
let a:i32;
a = 3;
println!("",a)
上面的代码没有问题,因为a=3 是初始化操作。
类型
整数
整数类型 | 有符号 | 无符号 |
---|---|---|
8bit | i8 | u8 |
16bit | i16 | u16 |
32bit | i32 | u32 |
64bit | i64 | u64 |
128bit | i128 | u128 |
指针 | isize | usize |
其他的类型如浮点、char都没有啥特别的地方。
tuple和struct
元组在很多语言都支持,譬如Python。rust的元组也没有啥特别之处
let a = (3, false);
println!(":?", a);
struct 也类似
fn main()
let p = Pointx:3,y:4;
println!(":?", p);
#[derive(Debug)]
struct Point
x : i32,
y : i32,
除此之外还有一个tuple struct,对你没听错,就是他两的组合体。对比枚举使用 ()、struct 使用 ,tuple struct长的有点四不像,使用枚举() ,结合struct的定义。
struct Color(i32, i32, i32);
eume
rust和其他语言还有个不同点是枚举类型。
fn main()
let a: Number= Number::Int(10);
read_num(&a);
let b: Number= Number::Float(10.0);
read_num(&b);
fn read_num(num: &Number)
match num
&Number::Int(value) => println!("Integer ", value),
&Number::Float(value) => println!("Float ", value),
enum Number
Int(i32),
Float(f32),
这种match表达是go和java里面的switch类似。
类型转换
rust 采用了显示的方式进行类型转换
let varl : i32 = 41;
let var2 : i16 = varl as i16;
相比很多语言采用的隐式转换,rust这种做法能够避免很多类型转化造成的异常。
类型推导
之所以我使用截图,是因为IDE已经可以看到推导的类型了,编译器会根据我塞入的数据的类型推导vec的类型。
以上是关于rust学习笔记-变量和类型的主要内容,如果未能解决你的问题,请参考以下文章