|
|
|
@ -302,7 +302,7 @@ note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
|
|
|
|
因此在通过索引区间来访问字符串时,需要格外的小心,一不注意,就会导致你程序的崩溃!
|
|
|
|
|
|
|
|
|
|
## 操作UTF8字符串
|
|
|
|
|
前文提到了几中使用UTF8字符串的方式,下面来一一说明。
|
|
|
|
|
前文提到了几种使用UTF8字符串的方式,下面来一一说明。
|
|
|
|
|
|
|
|
|
|
#### 字符
|
|
|
|
|
如果你想要以Unicode字符的方式遍历字符串,最好的办法是使用`chars`方法,例如:
|
|
|
|
@ -342,7 +342,7 @@ for b in "中国人".bytes() {
|
|
|
|
|
想要准确的从UTF8字符串中获取子串是较为复杂的事情,例如想要从`holla中国人नमस्ते`这种变长的字符串中取出某一个子串,使用标准库你是做不到的,
|
|
|
|
|
你需要在`crates.io`上搜索`utf8`来寻找想要的功能。
|
|
|
|
|
|
|
|
|
|
可以考虑尝试下这个库:[utf8 slice](https://crates.io/crates/utf8_slice).
|
|
|
|
|
可以考虑尝试下这个库:[utf8_slice](https://crates.io/crates/utf8_slice).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -358,7 +358,7 @@ for b in "中国人".bytes() {
|
|
|
|
|
|
|
|
|
|
其中第一个由`String::from`完成,它创建了一个全新的String.
|
|
|
|
|
|
|
|
|
|
重点来了,到了第二部分,就是百家齐放的环节,在有**垃圾回收GC**的语言中,GC来负责标记并清除这些不再使用的内存对象,这些都是自动完成,无需开发者关心,非常简单好用;在无GC的语言,是开发者手动去释放这些内存对象,就像创建对象一样,需要通过编写代码来完成,因为未能正确释放对象造成的经济简直不可估量.
|
|
|
|
|
重点来了,到了第二部分,就是百家齐放的环节,在有**垃圾回收GC**的语言中,GC来负责标记并清除这些不再使用的内存对象,这些都是自动完成,无需开发者关心,非常简单好用;在无GC的语言,是开发者手动去释放这些内存对象,就像创建对象一样,需要通过编写代码来完成,因为未能正确释放对象造成的结局简直不可估量.
|
|
|
|
|
|
|
|
|
|
对于Rust而言,安全和性能是写到骨子里的核心特性,使用GC牺牲了性能,使用手动管理内存牺牲了安全,那该怎么办?为此,Rust的开发者想出了一个无比惊艳的办法:变量在离开作用域后,就自动释放其占用的内存:
|
|
|
|
|
|
|
|
|
|