首页 > 其他 > 详细

Closure move 数值类型与引用类型的区别

时间:2020-03-26 09:48:05      阅读:56      评论:0      收藏:0      [点我收藏+]
在使用 闭包+move后 数值类型的变量仍然可以引用,但是string变量不能再引用,提示已经“value borrowed here after move”,从这里可以引申,其它引用类型如struct 应该跟string一样处理。
pub fn main(){
    let ch=‘英‘;
    let  ch2=& ch;
    let  ch3=& ch;
    println!("{:?}",(&ch,ch2,ch3));

    let  ch=String::from("英");
    let  ch2=&ch;
    let ch3=& ch;
    println!("{:?}",(&ch,ch2,ch3));

    let mut b = false;
    let x = &mut b;    
    {
        let mut c = || { *x = true; };
        // The following line is an error:
        // let y = &x;
        c();
        println!("{:?}",x);
    }    
    let z = &x;
    //b=true;
    println!("{:?}",z);

    let mut num = 5;    
    let add_num = || println!("Closure   num:{:?}",num);
    add_num();
    let a=&mut num;
    println!("num:{:?}",&num);

    let mut add_num = || {num+=5;println!("Closure   num:{:?}",&num);};
    add_num();
    println!("num:{:?}",&num);
    let a=&mut num;
    println!("num:{:?}",a);

    let mut add_num = move ||{num+=5;println!("Closure   num:{:?}",&num);};
    add_num();
    println!("num:{:?}",&num);
    let a=&mut num;
    println!("num:{:?}",a);


    let mut num = String::from("hello");    
    let add_num = || println!("Closure   num:{:?}",num);
    add_num();
    let a=&mut num;
    println!("num:{:?}",&num);

    let mut add_num = || {num+="5";println!("Closure   num:{:?}",&num);};
    add_num();
    println!("num:{:?}",&num);
    let a=&mut num;
    println!("num:{:?}",a);

    
    let mut add_num = move || {num+="5";println!("Closure   num:{:?}",&num);};
    add_num();
    //let a=&mut num; // ^^^^^^^^ value borrowed here after move
    //println!("num:{:?}",a);   
}

 

Closure move 数值类型与引用类型的区别

原文:https://www.cnblogs.com/liufu627/p/12571881.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!