Для этого вы можете использовать обычный шаблон 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();
Тип s
в замыкании: &Rc<String>
,Разыменовав один раз, вы получите Rc<String>
.Разыменовывая снова, вы получаете String
.Строка неявно перезагружается для вызова clone()
, который возвращает копию строки.