在Rust book和docs中,
虽然这个可以正常工作(playground):
这是否意味着
如果不是:
顺便说一句:如果上述是一个"int slice",那么
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
的特点是什么,使其无法成为切片?顺便说一句:如果上述是一个"int slice",那么
str
不应该被描述为"char slice"吗?
&[u8]
或&[char]
? - Jan15&str
总是 UTF-8 有效的,而&[u8]
可以包含任何内容。大多数情况下,u8
也不是与字符串一起使用的真正有用的类型(char
也是如此,这就是为什么&str
与&[char]
不同的原因)。 - mcarton