我有一个struct MyStruct<'a>
,其中self.text
的类型为&'a str
我认为这会给我一个str的子串:
let slice: &str = self.text[i .. self.text.len()];
但是我收到以下错误:
src/lexer.rs:67:28: 67:59 error: mismatched types: expected `&str`, found `str` (expected &-ptr, found str) [E0308] src/lexer.rs:67 let slice: &str = self.text[i .. self.text.len()];
我做错了什么?
答案 0 :(得分:4)
self.text[i .. self.text.len()]
的类型为str
;你需要重新借用结果才能获得&str
。另请注意,您可以省略范围的上限。这让你:
let slice: &str = &self.text[i..];
编辑:要注意为什么:这是因为切片只是索引的一种特殊情况,其行为方式相同(如果您希望借用对你索引的东西,你需要借用它)。如果不进入动态大小类型,我无法真正了解更多细节,这可能最适合进行不同的讨论。