Rust 代码优化:处理字符串并移除换行符和转义字符
以下代码展示了如何处理 Rust 字符串,去除换行符和转义字符,并解决 'temporary value dropped while borrowed' 错误:/n/nrust/nlet res = /'let completions: Vec<&str> = res//n // 去掉换行符//n .replace(////n/', /'/')//n // 分割字符串切片向量,每个元素都包含了completion值的json对象字符串//n .split(/{////type/':/'success/',/'completion/':/'')//n .skip(1)//n // 提取completion值//n .map(|s| s.split(/'///').next().expect(/'map error on loop./'))//n // 去掉转义字符//n .map(|s| s.replace(/'/////', /'/'))//n .collect();/n/n// 它报错/n/ntemporary value dropped while borrowed/n --> src//main.rs:31:46/n |/n31 | let completions: Vec<&str> = res/n | ______________________________________________^//n32 | | .replace(/'//n/',/'/')/n | |_____________________________________^ creates a temporary which is freed while still in use/n.../n39 | .collect();/n | - temporary value is freed at the end of this statement/n40 | //join 合并字符串/n41 | let merged = completions.join(/'/');/n | -------------------- borrow later used here/n |/n = note: consider using a `let` binding to create a longer lived value/n/n/n怎么解决内容:/n/n可以将replace和map操作的结果存储到一个中间变量中,再进行后续的操作,避免出现temporary value dropped while borrowed的错误。修改后的代码如下:/n/nlet res = res.replace('//n', '').replace('////', '/'');/nlet completions: Vec<&str> = res/n .split('{/'type/':/'success/',/'completion/':/'')/n .skip(1)/n .map(|s| s.split('/'}').next().expect(/'map error on loop./'))/n .collect();/nlet merged = completions.join('');/n/n/n解释:/n/n1. 错误原因: 原始代码中,replace 和 map 操作创建了临时变量,这些临时变量在 collect 操作结束时被释放。而 join 操作试图使用这些临时变量,导致错误。/n/n2. 解决方案: 通过将 replace 和 map 操作的结果存储到一个中间变量 res 中,确保这些变量在 join 操作执行时依然存在,从而避免错误。/n/n建议:/n/n* 使用中间变量存储数据,避免临时变量的错误。/n* 仔细阅读错误信息,并尝试理解错误的原因。/n* 针对不同情况选择合适的字符串操作方法。/n
原文地址: https://www.cveoy.top/t/topic/lBUC 著作权归作者所有。请勿转载和采集!