从零开始的rust学习(2):复合类型
rust 里的复合类型比较重要,需要牢牢掌握。
字符串
首先是字符串类型。和其他语言有较大的区别,rust 里的字符是 unicode 类型;字符串是 UTF-8 编码。前者是每个字占用固定的 4 字节,后者所占用空间在 1~4 之间不定。
对于字符串,rust 也有两种类型:String
和&str
这两种类型之间的转换如下:
1 | //&str -> String |
关于操作字符串的函数,此处不赘述,详情见链接
元组
这是比较简单的符合类型,通过小括号将不同的类型合在一起。
1 | fn main() { |
元组的默认顺序是从 0 开始排布,所以可以用.
来访问。
也可以通过模式匹配:
1 | fn main() { |
数组
rust 里的数组和字符串一样,有两种类型需要区分。分别是 array(数组)和 vector(动态数组)。动态数组和其他语言里的数组功能类似。
第一种数组的特性:
- 长度固定
- 元素必须有相同的类型
- 依次线性排列
创建“数组”
1 | fn main() { |
创建“动态数组”
1 | //1 |
结构体
关于结构体的创建和修改函数,参考此处链接
举例:
1 | struct User { |
其中比较特殊的有:
- 元组结构体
- 单元结构体
关于结构体的所有权变化需要注意
枚举
枚举是重要的概念,需要牢记!参考链接
一般用法,以扑克牌为例
1 | enum PokerSuit { |
另外比较重要的一个用法是 option 枚举,这个枚举可以用来解决 null 的问题。
1 | enum Option<T> { |
以上只是粗略概括,重点需要关注的是每个类型的属性,注意可变和不可变,还有所有权改变的条件。