Rust根据不同的应用场景将字符串划分为了不同种类,我们今天只介绍最常见的两种str 与 String
2.1 str
str是Rust中的原生类型,存放在静态存储区。因为它是动态类型,在编译期无法确定大小,所以我们经常使用它的引用形式&str。str总是有效的UTF-8编码
它可以由字面量直接创建生成,也可以由其他类型转换而来,也可转为其它类型
事实上,str作为rust的原生类型,它实现了很多方法。支持对字符串进行转换、分割、解析、查找的等操作。具体读者可以参见标准库
https://doc.rust-lang.org/std/primitive.str.html#
另外,str实现了常见的trait,比如AsMut、Debug、From等等,另外也实现了Send和Sync,可以在并发编程中无忧使用。
特别说明:引用类型在Rust中是一等公民,并且是Copy的
2.2 String
String是一个胖指针(也是个智能指针:可以自动解引用以及调用析构函数)。它包含三个word:分别是的ptr、cap和len。数据存放在堆上,动态大小。本质上是一个结构体
注意:String没有实现Copy trait
String一个常用的场景就是处理一些文件内容,我们来看一个比较全面的例子,这个例子读取了一个本地文件中数字,并做了求和操作
本地文件名为:sum_text
通过上面的例子,我们可以看到,在一些数据是动态场景下,我们经常会使用到String。另外,关于String牵扯到的知识点非常多,比如所有权机制、智能指针、各种Trait、内存、函数调用栈等,这些知识点我们后面会一一讲解
示例代码Github地址:
https://github.com/shiyivei/from-principle-to-practice/blob/main/src/parse-file/src/refactor_one.rs
更多内容,欢迎关注公众号拾一维