rust refcell, and asmut

use std::sync::{Arc, Mutex, Condvar};
use std::thread;
use std::cell::RefCell;

#[derive(Debug)]
struct D{
    name: RefCell<String>,
    data: Vec<i32>
}

#[derive(Debug)]
struct A{
    title: String,
    data: i32
}


fn c(c:&D){
    *c.name.borrow_mut() = "skfjds1234f".to_string();
    // c.borrow_mut().name = "sdsdf".to_string();
    // println!("{:?}", &c);
}

fn dd<T:AsMut<A>>(c:&mut T){
    c.as_mut().title = "nfilnaletitle".to_string();
}

impl std::convert::AsMut<A> for A {
    fn as_mut(&mut self) -> &mut A {
        &mut *self
    }
}

fn aaaaa(c:&mut A) {
    c.as_mut().title = "hahaha".to_string();
}

fn main(){
   let a = D {name: RefCell::new("a".to_string()), data: vec![1,2,3]};
//    println!("{:?}", &a);
    // *a.name.borrow_mut() = "sjkff".to_string();
    // c(&a);
    // c(RefCell::new(a));
    // println!("{:?}", &a);

//    let mut b = Box::new(A{title:"other".to_string(), data: 100_i32});
    let mut c111 = A{title:"oc_directtrait".to_string(), data: 123456_i32};

    // dd(&mut b);
    // dd(&mut c);

    aaaaa(&mut c111);
//    println!("{:?}", &b);
   println!("{:?}", &c111);
}

  

posted @ 2022-08-10 14:46  CrossPython  阅读(40)  评论(0)    收藏  举报