我目前有一个Vec<Rc<Item>>,我非常希望有一个Vec<Item>,其中每个 Rc 项目都被克隆到新的 Vec 中。我该如何实现?
您可以iter().map(...).collect()为此使用通常的模式。在地图内部,您需要Rc通过先取消引用然后调用来创建内部项目的克隆clone():
let v: Vec<_> = (0..10).map(|_| Rc::new(String::from("a"))).collect();
let v: Vec<_> = v.iter().map(|s| (**s).clone()).collect();
Run Code Online (Sandbox Code Playgroud)
s闭包中的类型是&Rc<String>。通过取消引用一次,您将获得Rc<String>. 通过再次取消引用,您将获得一个String. 为调用 隐式重新借用该字符串,该调用clone()返回该字符串的副本。