想我試圖做魯斯特使用&str
看中零拷貝分析器,但有時我需要修改的文本(例如實現變量替換)。我真的很想做這樣的事情:使用STR和字符串互換
fn main() {
let mut v: Vec<&str> = "Hello there $world!".split_whitespace().collect();
for t in v.iter_mut() {
if (t.contains("$world")) {
*t = &t.replace("$world", "Earth");
}
}
println!("{:?}", &v);
}
當然但String
通過t.replace()
返回不活足夠長的時間。有沒有一個很好的解決方法?也許有一種類型意味着「理想的&str
,但如果有必要String
」?或者,也許還有用一生的註解告訴返回String
應保持活着,直到main()
末編譯器(或具有相同的壽命爲v
)的方法嗎?
'to_mut'這裏只創建一個不必要的'String'值(涉及堆內存分配)立即被覆蓋(包括釋放),我會把這行改爲'* t = Cow :: Owned(t.replace(「$ world」,「Earth」));'以避免這種開銷 – sellibitze
你最後一個例子可能除了「仔細考慮」之外,還應該有更多的警告,它會直接對基於字節的UTF-8字符串進行操作,並且依賴於替換恰好相同的字節數,這絕對是一種優化,但不是 – Shepmaster
增加了更多的警告和一些粗體文本,我想知道是否有一個PR爲'Stri'添加'替換(&mut self,needle,value)'函數ng'結構將被接受 –