Rust中两个切片之间有什么区别?

时间:2017-12-14 13:45:28

标签: rust slice

let s1 = String::from("hello world.");
let r1 = &s1;
let sl1 = &s1[..];
let sl2 = &r1[..];
let sl3 = r1[..];
println!("{}", sl3);

sl1sl2之间有什么区别,为什么sl3无效?是否r1已成为参考,为什么需要&

1 个答案:

答案 0 :(得分:1)

编译器取消引用 Index::index的输出,当你去掉索引语法[]时(参见相关的question及其答案)。使用显式类型注释,绑定的类型如下:

let r1: &str = &s1;
let sl1: &str = &s1[..];
let sl2: &str = &r1[..];
let sl3: str = r1[..];
作为unsized类型的

str不能放在堆栈上,因此不能用作绑定sl3的局部变量的类型,因此编译错误。