我可以在Rust中创建一个包含字符串和该字符串片段的结构吗?
我试图创建一个结构,该结构接受输入字符串(并拥有它的所有权),进行一些计算,然后返回一个包含该字符串和该字符串的一些预计算片段的结构 比如:我可以在Rust中创建一个包含字符串和该字符串片段的结构吗?,rust,borrow-checker,borrowing,Rust,Borrow Checker,Borrowing,我试图创建一个结构,该结构接受输入字符串(并拥有它的所有权),进行一些计算,然后返回一个包含该字符串和该字符串的一些预计算片段的结构 比如: pub异步fn读取文件>{ 让contents=tokio::fs::读取字符串(路径)。等待?; let slice=昂贵的搜索(&内容); Ok(MyString::new(内容,片段)) } 发布结构MyString{ pub fn new(string:string,slice:&'a str)->MyString你能让搜索变得昂贵吗?将开始和结束
pub异步fn读取文件>{
让contents=tokio::fs::读取字符串(路径)。等待?;
let slice=昂贵的搜索(&内容);
Ok(MyString::new(内容,片段))
}
发布结构MyString{
pub fn new(string:string,slice:&'a str)->MyString你能让搜索变得昂贵吗?
将开始和结束索引返回到字符串中,并将它们传递给MyString::new()
?然后你可以像这样每次都创建一个新的片段
fn获取切片(&self)->&str{
&self.contents[self.start..self.end]
}
谢谢,我会试试。每次调用方想要访问这样的切片时,创建这样的切片是否“便宜”?一个切片基本上就是两个“usize”调整了变量的大小,因此它非常便宜。freenode irc网络上尼斯###锈频道的一位朋友通风报信说,您可以使用std::ops::Range
而不是两个单独的开始和结束字段。然后您可以改为使用&self.contents[self.Range]
`contents` does not live long enough
borrowed value does not live long enough
utils.rs(43, 31): borrowed value does not live long enough
utils.rs(45, 1): `contents` dropped here while still borrowed