Time: 20190921

数据类型概览

Rust是一种静态语言,也是一门强类型语言。每个值都对应着一个特定的类型。

编译器知道数据类型后,就知道该类型对应的确定的操作。本篇主要关注两种特定类型:

  • 标量数据类型
  • 符合数据类型

Rust比较强的地方是,编译器能自动进行类型推断。在有些场景下,有很多类型选择,就需要我们指定具体类型,比如String类型用parse解析为数值类型时:

let guess: u32 = "42".parse().expect("Not a number");

标量数据类型

Rust有四种基本标量数据类型:

  • 整数
  • 浮点数
  • 布尔数
  • 字符

整数类型

整数类型分为两类:

  • 有符号整数:i开头
  • 无符号整数:u开头

有符号整数:

  • i8
  • i16
  • i32
  • i64
  • i128
  • isize: 根据架构位数决定

无符号整数:

  • u8
  • u16
  • u32
  • u64
  • u128
  • usize

整数字面量

可以在整数数值字面量后面添加类型,这样更加清晰。还可以在数字中插入_,更加易读。

  • 98_222
  • 57u8

添加前缀表示数字的进制:

  • 0xff : 16进制
  • 0o77: 八进制
  • 0b1111_0000:二进制
  • b’A’:字节类型,仅仅适用于u8类型

浮点数类型

两种常用的是:

  • f32
  • f64

默认浮点数类型是64位浮点数。

fn main() {let x = 2.0; // 自动推断为f64let y: f32 = 3.0; // 明确指定为f32
}

数值操作

这个没啥好多说的,加减乘除,求模等都是基本操作。

布尔类型

fn main() {let t = true; // 自动推断let f: bool = false;  // 显式类型标注
}

字符类型

用单引号表示:

fn main() {let c = 'z';let c = 'Z';
}

Rust中的char类型有4个字节大小。

复合数据类型

这部分主要是说两种类型:

  • 元组
  • 数组

元组类型

元组的大小固定。

Rust中,元组中的元素值类型可以不同。比如下面这种写法:

fn main() {let tup: (i32, f64, u8) = (500, 6.4, 1);
}

灵活性比较好。为了获取元组中的数值,可以用解构的方式:

fn main() {let tup = (500, 6.4, 1);let (x, y, z) = tup;
}

这个和ES6中的结构概念是一致的, 不过ES6中使用{}来解构。

索引语法:.

和一般语言中用[]索引元素不同,Rust用的是下面这种方式:

fn main() {let tup: (i32, f64, u8) = (500, 6.4, 1);let a = tup.0;let b = tup.1;let c = tup.2;
}

确实语法上读起来也很舒服。

数组类型

数组类型和元组是有相似的地方,都是一种将很多元素综合在一起的方式。但是,数组对元素的要求需要“整齐”,类型需要相同

但是,Rust中的数组和其他语言很不同,它和元组倒是有相同之处,即:大小是固定的

最基本的用法是:

fn main() {let a = [1, 2, 3, 4, 5];
}

数组中的元素是存储在上,而不是在上。

如果需要动态数组,可以用向量类型,这个和C++的STL中的Vector是相似的。

数组这种,熟知它的两个特性即可:

  • 元素类型相同
  • 大小固定

上面是动态推导的方式,下面是指定类型的方式:

let a: [i32; 5] = [1, 2, 3, 4, 5];

一个标识类型,一个标识个数。

用下面的方式可以赋予一个数组相同的初值:

let a = [3; 5];

读取数组元素

fn main() {let a = [1, 2, 3, 4, 5];let first = a[0];let second = a[1];
}

这和其他语言读取数组元素方式是一致的。

Rust的数组越界处理

fn main() {let a = [1, 2, 3, 4, 5];let index = 10;let element = a[index];println!("The value of element is: {}", element);
}

执行会得到以下错误:

$ cargo runCompiling arrays v0.1.0 (file:///projects/arrays)Finished dev [unoptimized + debuginfo] target(s) in 0.31 secsRunning `target/debug/arrays`
thread 'main' panicked at 'index out of bounds: the len is 5 but the index is10', src/main.rs:5:19
note: Run with `RUST_BACKTRACE=1` for a backtrace.

Rust will panic!

2019.10 Update:

第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、

END.

Rust基础概念之数据类型相关推荐

  1. Rust基础概念之函数

    Time: 20190921 函数在Rust中是无处不在的,到现在为止,看了很多main函数,这个是程序的入口.fn表示函数声明. Rust中的编程风格是蛇形命名法,即都采用小写字母,单词之间用下划线 ...

  2. Java基础概念干货(字符、标识符、数据类型... ...)

    Java基础概念之字符.标识符.数据类型 一.字节 1.位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数. 2.字节(byte):是计算机中数据处理的基本单位,习惯上用 ...

  3. Redis基础 概念 数据类型 常用指令 Jedis 持久化

    Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...

  4. 数据库基础笔记(MySQL)1 —— 基础概念

    (写算法题目把自己心态搞崩了,休息两天顺便把之前学的数据库手写笔记记录在网上方便查阅,因为只是自己学的时候做的笔记,如果有错误欢迎大家指正,过两天再重回算法的怀抱哈哈) 如何下载配置 这个感觉视频讲的 ...

  5. python 舍去小数_零基础小白Python入门必看——编程基础概念

    1. 程序的构成 程序由模块组成,一个模块对应python的源文件 ,一般后缀为:.py 模块由语句构成 语句是python程序的构造单元,用于创建对象.变量赋值.调用函数.控制语句等. 2. 对象 ...

  6. 机器学习的9个基础概念和10种基本算法总结

    https://blog.csdn.net/libaqiangdeliba/article/details/41901387 1.基础概念: (1) 10折交叉验证:英文名是10-fold cross ...

  7. 从属关系mysql_关系型数据库基础概念:MySQL系列之开篇

    一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...

  8. 判断线程是否执行完毕_Java并发编程 | 线程核心机制,基础概念扩展

    源码地址:GitHub || GitEE 一.线程基本机制 1.概念描述 并发编程的特点是:可以将程序划分为多个分离且独立运行的任务,通过线程来驱动这些独立的任务执行,从而提升整体的效率.下面提供一个 ...

  9. 【Python 爬虫】 1、爬虫基础概念

    爬虫基础概念 网络爬虫的定义 网络爬虫(Crawler)又被成为网络蜘蛛(Spider),网络机器人,网页追逐者,它是一种按照一定规则,自动的抓取万维网信息的程序或者脚本. [狭义与广义定义] 狭义上 ...

最新文章

  1. pythonsqlite3教程_使用 Python 在线操作 sqlite3
  2. linux使用pyodbc和freetds连接sqlserver
  3. 卡尺测量的最小范围_不知道这四大基本原则,你还有脸在测量圈混?
  4. LeetCode 812. 最大三角形面积(坐标面积公式)
  5. (转)Linux SLUB 分配器详解
  6. 腾讯发力研发文化升级,宣布加入Linux基金会TODO 工作组
  7. python和java哪个好学-Java和Python去学哪个好
  8. 添加地图图例 Arcengine+C#
  9. PHP可以通过什么组件上传大文件
  10. ArcGis 拓扑检查——狭长角锐角代码C#
  11. separating axis test——分离轴测试算法的实现
  12. 计算机管理模块无法初始化单元,win7组策略提示MMC无法初始化管理单元怎么办...
  13. 蓝蓝设计 使用全屏照片的网页设计欣赏
  14. javamail QQ邮箱发验证码设定有效时间
  15. 东北大学计算机学院教授,东北大学之计算机系
  16. 计算机网络教程第五版|微课版 - 第五章 运输层 - 重要概念【补充】
  17. 3D阴影效果css3按钮代码
  18. xpwifi热点设置android,笔记本xp系统wifi热点设置教程(图文)
  19. 【电路设计】晶振选择和负载容抗匹配参考指南
  20. 在 pygame 中好好玩玩精灵,滚雪球学 Python 游戏番

热门文章

  1. LeetCode-1.两数之和(哈希表)
  2. java反射获取注解id,通过反射获取注解(Annotation)
  3. 软件架构设计_架构师内功心法,软件架构设计的七大原则精选案例
  4. phpexcel 数字格式_将文本转换为phpexcel中的数字格式
  5. 获取bootgrid选中行数据_Easyui 取得选中行数据_EasyUI 教程
  6. 给定奇数、横、竖、斜、总和相等python_第四章练习
  7. python实习生面试题_【实习】暑期实习之python笔试题(一)
  8. 队列和通知区别_Java多线程学习(五)——等待通知机制
  9. hibernate一级缓存_Hibernate缓存–一级缓存
  10. ROS的学习(六)理解ROS的节点(NODE)