rust - How do I automatically clear an attribute in a struct when it is moved? -
i have struct
struct test {     list: vec<u64> }   and method in vector , erase list field empty vec
fn get_list(&self) -> vec<u64> {     let list = vec::new();     item in self.list.drain() {         list.push(item);     }     list }   it there approach doing it? autoreinit field on moving value, example:
fn get_list(&self) -> ???<vec<u64>> {     self.list }      
here solution, can test on rust playground (sadly share button doesn't work me atm).
use std::mem;  #[derive(debug)] struct test {    list: vec<u64> }  impl test {      fn get_list(&mut self) -> vec<u64> {        let repl = mem::replace(&mut self.list, vec::new());        repl     }  }  fn main() {     let mut r = test {        list : vec![1,2,3]     };     print!("r : {:?} ", r);     print!("replace : {:?} ", r.get_list());     print!("r : {:?} ", r); }   you need run mem::replace(docs) on mutable value , replace value moved in place. in case our destination self.list , value replacing blank vec. 
things note:
- field 
self.listof test, needs taken&mut self.list. - previous change implies 
selfshould mutable well. - second parameter of replace moved. means won't available further after call. means, either pass vec constructor (e.g. 
vec::new()) or clone of value that's replacing. 
Comments
Post a Comment