gpt4 book ai didi

string - 如果 str 是 "string slice",为什么 std::slice 毯子实现不能在 str 上工作?

转载 作者:行者123 更新时间:2023-11-29 07:59:18 25 4
gpt4 key购买 nike

Rust bookdocs , str 被称为一个切片(在书中他们说一个切片到一个 String)。因此,我希望 str 的行为与任何其他切片相同:例如,我应该能够使用 std::slice 的一揽子实现。然而,情况似乎并非如此:

虽然这按预期工作(playground):

fn main() {
let vec = vec![1, 2, 3, 4];
let int_slice = &vec[..];
for chunk in int_slice.chunks(2) {
println!("{:?}", chunk);
}
}

编译失败:(playground)

fn main() {
let s = "Hello world";
for chunk in s.chunks(3) {
println!("{}", chunk);
}
}

错误信息如下:

error[E0599]: no method named `chunks` found for type `&str` in the current scope
--> src/main.rs:3:20
|
3 | for chunk in s.chunks(3) {
| ^^^^^^

这是否意味着 str 不是常规切片?

如果不是:str有什么特点,不可能是slice?

旁注:如果上面是“int slice”,难道 str 不应该被描述为“char slice”吗?

最佳答案

str 的文档以

开头

The str type, also called a 'string slice',

引号在这里很重要。 str 是一个“字符串切片”,与简单的“切片”不同。它们共享名称是因为它们非常相似,但在其他方面彼此没有关联。

然而,您可以使用 as_bytes 从 'str' 中获取常规切片.还有一个mutable version ,这是不安全的,因为您可以使用它来破坏 &[u8]&str 的重要不变量:UTF-8 有效性。

关于string - 如果 str 是 "string slice",为什么 std::slice 毯子实现不能在 str 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com