let s1 = String::from("hello world.");
let r1 = &s1;
let sl1 = &s1[..];
let sl2 = &r1[..];
let sl3 = r1[..];
println!("{}", sl3);
sl1
和sl2
之间有什么区别,为什么sl3
无效?是否r1
已成为参考,为什么需要&
?
答案 0 :(得分:1)
编译器取消引用 Index::index
的输出,当你去掉索引语法[]
时(参见相关的question及其答案)。使用显式类型注释,绑定的类型如下:
let r1: &str = &s1;
let sl1: &str = &s1[..];
let sl2: &str = &r1[..];
let sl3: str = r1[..];
作为unsized类型的 str
不能放在堆栈上,因此不能用作绑定sl3
的局部变量的类型,因此编译错误。