"error: mismatched types" when indexing a &str

"error: mismatched types" when indexing a &str

我有一个 struct MyStruct<'a>,其中 self.text 的类型是 &'a str

我假设这会给我这个 str 的子串:

let slice: &str  = self.text[i .. self.text.len()];

但是我收到以下错误:

src/lexer.rs:67:28: 67:59 错误:类型不匹配:
 预期的`&str`,
    找到`str`
(预期 &-ptr,
    找到 str) [E0308]
src/lexer.rs:67 let slice: &str = self.text[i .. self.text.len()];

我做错了什么?

self.text[i .. self.text.len()]str 类型;您需要重新借用结果才能得到 &str。另请注意,您可以省略范围的上限。这让你:

let slice: &str = &self.text[i..];

编辑:要注意为什么:这是因为切片只是索引的一种特殊情况,其行为方式相同(如果你想借用你索引的东西的引用,你需要从它那里借用)。如果不讨论动态大小的类型,我真的无法深入了解更多细节,这可能最好留作不同的讨论。