Rust基础概念之数据类型
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基础概念之数据类型相关推荐
- Rust基础概念之函数
Time: 20190921 函数在Rust中是无处不在的,到现在为止,看了很多main函数,这个是程序的入口.fn表示函数声明. Rust中的编程风格是蛇形命名法,即都采用小写字母,单词之间用下划线 ...
- Java基础概念干货(字符、标识符、数据类型... ...)
Java基础概念之字符.标识符.数据类型 一.字节 1.位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数. 2.字节(byte):是计算机中数据处理的基本单位,习惯上用 ...
- Redis基础 概念 数据类型 常用指令 Jedis 持久化
Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...
- 数据库基础笔记(MySQL)1 —— 基础概念
(写算法题目把自己心态搞崩了,休息两天顺便把之前学的数据库手写笔记记录在网上方便查阅,因为只是自己学的时候做的笔记,如果有错误欢迎大家指正,过两天再重回算法的怀抱哈哈) 如何下载配置 这个感觉视频讲的 ...
- python 舍去小数_零基础小白Python入门必看——编程基础概念
1. 程序的构成 程序由模块组成,一个模块对应python的源文件 ,一般后缀为:.py 模块由语句构成 语句是python程序的构造单元,用于创建对象.变量赋值.调用函数.控制语句等. 2. 对象 ...
- 机器学习的9个基础概念和10种基本算法总结
https://blog.csdn.net/libaqiangdeliba/article/details/41901387 1.基础概念: (1) 10折交叉验证:英文名是10-fold cross ...
- 从属关系mysql_关系型数据库基础概念:MySQL系列之开篇
一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...
- 判断线程是否执行完毕_Java并发编程 | 线程核心机制,基础概念扩展
源码地址:GitHub || GitEE 一.线程基本机制 1.概念描述 并发编程的特点是:可以将程序划分为多个分离且独立运行的任务,通过线程来驱动这些独立的任务执行,从而提升整体的效率.下面提供一个 ...
- 【Python 爬虫】 1、爬虫基础概念
爬虫基础概念 网络爬虫的定义 网络爬虫(Crawler)又被成为网络蜘蛛(Spider),网络机器人,网页追逐者,它是一种按照一定规则,自动的抓取万维网信息的程序或者脚本. [狭义与广义定义] 狭义上 ...
最新文章
- pythonsqlite3教程_使用 Python 在线操作 sqlite3
- linux使用pyodbc和freetds连接sqlserver
- 卡尺测量的最小范围_不知道这四大基本原则,你还有脸在测量圈混?
- LeetCode 812. 最大三角形面积(坐标面积公式)
- (转)Linux SLUB 分配器详解
- 腾讯发力研发文化升级,宣布加入Linux基金会TODO 工作组
- python和java哪个好学-Java和Python去学哪个好
- 添加地图图例 Arcengine+C#
- PHP可以通过什么组件上传大文件
- ArcGis 拓扑检查——狭长角锐角代码C#
- separating axis test——分离轴测试算法的实现
- 计算机管理模块无法初始化单元,win7组策略提示MMC无法初始化管理单元怎么办...
- 蓝蓝设计 使用全屏照片的网页设计欣赏
- javamail QQ邮箱发验证码设定有效时间
- 东北大学计算机学院教授,东北大学之计算机系
- 计算机网络教程第五版|微课版 - 第五章 运输层 - 重要概念【补充】
- 3D阴影效果css3按钮代码
- xpwifi热点设置android,笔记本xp系统wifi热点设置教程(图文)
- 【电路设计】晶振选择和负载容抗匹配参考指南
- 在 pygame 中好好玩玩精灵,滚雪球学 Python 游戏番
热门文章
- LeetCode-1.两数之和(哈希表)
- java反射获取注解id,通过反射获取注解(Annotation)
- 软件架构设计_架构师内功心法,软件架构设计的七大原则精选案例
- phpexcel 数字格式_将文本转换为phpexcel中的数字格式
- 获取bootgrid选中行数据_Easyui 取得选中行数据_EasyUI 教程
- 给定奇数、横、竖、斜、总和相等python_第四章练习
- python实习生面试题_【实习】暑期实习之python笔试题(一)
- 队列和通知区别_Java多线程学习(五)——等待通知机制
- hibernate一级缓存_Hibernate缓存–一级缓存
- ROS的学习(六)理解ROS的节点(NODE)