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 是初始化操作。

类型

整数

整数类型有符号无符号
8biti8u8
16biti16u16
32biti32u32
64biti64u64
128biti128u128
指针isizeusize

其他的类型如浮点、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学习笔记-变量和类型的主要内容,如果未能解决你的问题,请参考以下文章

Rust学习笔记1.基础语法

Rust学习笔记1.基础语法

《JavaScript高级教程》学习笔记变量和数据类型

Rust:从标准输入读取和映射行并处理不同的错误类型

the rust book 的简单入门笔记

Rust语言教程 - 从熟悉的部分开始