Rust从入门到放弃(一):数据类型


Rust从入门到放弃(一):数据类型

大部分静态编译的语言都提供了类型支持,不同的类型分配不同大小的内存空间,当程序执行的时候,会根据熟悉类型去解析数据,譬如rust 里面的i32 代表32位的整形,在内存里面占用四个字节。下面介绍一下 rust 里面常用的类型

bool

bool 类型比较简单,这个和java 以及 go 等其他语言的一样

   let x = true;
   let y: bool = !x;
   let z = x && y;
   println!("{}", z);
   let z = x || y;
   println!("{}", z);

除了本身 true 和false以外,还支持 &&(与) 和 ||(或)操作。

char

rust的char 比较特殊,rust 统一采用Unicode编码,每一个char 都是一个Unicode字符,占用四个字节。

   let c1 = '
';
   let c2 = '';
   let c3 = 'u{7FF0}';

一个char 就可以代表一个汉字。如果需要节省空间,使用ASCII 码方式存储可以

  let y :u8 = b'A';
  let s :&[u8;5] = b"hello";

整数

整数可以分为 8位、16位、32位、64位、128位整形,每种整形有可以分为有符号和无符号两种,比如常用的32位整形可以分为:i32 和 u32 分别代表32位有符号 和 无符号 整形。rust 支持类型推导譬如下面的代码,var1 会被推导成 i32类型

let var1  = 32;

但你也只可以指定类型,常用的方式有两种,如下

 let var1 :i16  = 32; //直接指定类型
 let var1   = 32i16;  //通过后缀指定

浮点

浮点和整数使用是类似。

   let f1 = 123.0f64;
   let f2 = 0.1f64;
   let f3 = 0.1f32;

这里补充一点,就是类型转换,rust里面经常会看到通过 as 的方式进行类型转换,如下将i8 类型转换为 i16,由于 i16 比 i8 容量大,转换是安全的。

   let var1 : i8 = 41;
   let var2 : i16 = var1 as i16;

元组

第一次接触元组类型是在Python,rust 里面也支持元组类型,元组就是用括号把不同的类型组合起来。比如下面 a 就是一个元组类型

let a = (1i32, false);

其实go 的返回值也可以认为是一种元组,只不过go 没有明确这个类型。元组之中还可以嵌套元组

let b = ("a", (1i32, 2i32));

结构体

无论是c/c++ 还是go 都支持结构体。如下定义了一个坐标点,有两个属性分别是 x 和 y 。

struct Point {
   x: i32,
   y: i32,
}

后续我们就可以对结构体实例化,创建一个结构体”实例“。

fn main() {
   let p = Point { x: 0, y: 0};
   println!("Point is at {} {}", p.x, p.y);
}

这个和其他语言也没有啥区别。我们还可以给结构体添加方法,这个后面再说。

元组结构体

它是元组和结构体的杂交。定义像结构体,但大括号改成了小括号,属性都是匿名。

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

后续也可以实例化使用

fn main() {
   let p = Point( 1, 2, 3);
   println!("Point is at {} {} {}", p.0, p.1,p.2);
}

枚举

rust 枚举也没有什么特殊的,只不过类型定义不是通过 ”:“ 改成了小括号

enum Number {
   Int(i32),
   Float(f32),
}

枚举主要用于match 分支判断,匹配对应的类型。

fn read_num(num: Number) {
   match num {
  Number::Int(value) =>
     println!("Integer {}", value),
  Number::Float(value) =>
     println!("Float {}", value),
  }
}
fn main() {
   let n: Number = Number::Int(1);
   read_num(n);
}

数组

数组主要是保存一组相同类型的数据集合,可以通过如下两种方式

   let arr: [i32; 3] = [1, 2, 3];  //指定数组元素类型是i32,长度为3
   let init_arr = [0; 10];         //初始化长度为10,每个元素都为0

我们还可以从数组中生成切片,go里面是通过”:“切割,而rust 是通过 ”..“,比如

&arr[1..]   //[2, 3]

总结一下,rust 里面除了 元组结构体以外,和其他编程语言相比,并没有引入新概念。到这里还是比较容易学习的。

展开阅读全文

页面更新:2024-06-08

标签:浮点   括号   整数   数组   字节   数据类型   符号   实例   属性   入门   定义   常用   类型   语言   结构   代表   方式   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top