mirror of
https://github.com/rust-lang-cn/book-cn.git
synced 2025-01-23 07:20:20 +08:00
doc: Replace it with a numerical description
This commit is contained in:
parent
c9c49457d7
commit
7de02fb4b4
@ -187,13 +187,13 @@ error[E0277]: the trait bound `std::string::String: std::ops::Index<{integer}>`
|
|||||||
let len = String::from("Hola").len();
|
let len = String::from("Hola").len();
|
||||||
```
|
```
|
||||||
|
|
||||||
在这里,`len` 的值是 4 ,这意味着储存字符串 “Hola” 的 `Vec` 的长度是四个字节:这里每一个字母的 UTF-8 编码都占用一个字节。那下面这个例子又如何呢?(注意这个字符串中的首字母是西里尔字母的 Ze 而不是阿拉伯数字 3 。)
|
在这里,`len` 的值是 4 ,这意味着储存字符串 “Hola” 的 `Vec` 的长度是 4 个字节:这里每一个字母的 UTF-8 编码都占用 1 个字节。那下面这个例子又如何呢?(注意这个字符串中的首字母是西里尔字母的 Ze,而不是阿拉伯数字 3 。)
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let len = String::from("Здравствуйте").len();
|
let len = String::from("Здравствуйте").len();
|
||||||
```
|
```
|
||||||
|
|
||||||
当问及这个字符是多长的时候有人可能会说是 12。然而,Rust 的回答是 24。这是使用 UTF-8 编码 “Здравствуйте” 所需要的字节数,这是因为每个 Unicode 标量值需要两个字节存储。因此一个字符串字节值的索引并不总是对应一个有效的 Unicode 标量值。作为演示,考虑如下无效的 Rust 代码:
|
当问及这个字符是多长的时候有人可能会说是 12。然而,Rust 的回答是 24。这是使用 UTF-8 编码 “Здравствуйте” 所需要的字节数,这是因为每个 Unicode 标量值需要 2 个字节存储。因此一个字符串字节值的索引并不总是对应一个有效的 Unicode 标量值。作为演示,考虑如下无效的 Rust 代码:
|
||||||
|
|
||||||
```rust,ignore,does_not_compile
|
```rust,ignore,does_not_compile
|
||||||
let hello = "Здравствуйте";
|
let hello = "Здравствуйте";
|
||||||
@ -238,7 +238,7 @@ let hello = "Здравствуйте";
|
|||||||
let s = &hello[0..4];
|
let s = &hello[0..4];
|
||||||
```
|
```
|
||||||
|
|
||||||
这里,`s` 会是一个 `&str`,它包含字符串的头四个字节。早些时候,我们提到了这些字母都是两个字节长的,所以这意味着 `s` 将会是 “Зд”。
|
这里,`s` 会是一个 `&str`,它包含字符串的头 4 个字节。早些时候,我们提到了这些字母都是 2 个字节长的,所以这意味着 `s` 将会是 “Зд”。
|
||||||
|
|
||||||
如果获取 `&hello[0..1]` 会发生什么呢?答案是:Rust 在运行时会 panic,就跟访问 vector 中的无效索引时一样:
|
如果获取 `&hello[0..1]` 会发生什么呢?答案是:Rust 在运行时会 panic,就跟访问 vector 中的无效索引时一样:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user