我正在尝试了解有关所有权的更多信息。这是一些无效的代码,因为collect
不允许您获得&mut String
:
fn search(word: &str, data: &mut Vec<String>) {
data = data
.iter()
.filter(|x| x.contains(word))
.collect::<&mut Vec<String>>();
}
我想我可以返回一个克隆版本,但这是唯一/首选的方法吗?
答案 0 :(得分:7)
否,这是不可能的。为此,tf.shape
必须返回对其创建的内容的引用,that's not possible。
您正在寻找Vec::retain
:
collect
如果您不想突变传入的数据,则确实需要返回一个新的fn search(word: &str, data: &mut Vec<String>) {
data.retain(|x| x.contains(word));
}
:
Vec
另请参阅: