惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
U
Unit 42
Vercel News
Vercel News
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
C
Check Point Blog
N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
博客园_首页
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
Last Week in AI
Last Week in AI
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
V
Visual Studio Blog
小众软件
小众软件

博客园 - liufu627

使用option 链式调用来代替异步方法幂调用 Rust 各种情况下如何修改变量 Rust 单链表的实现 rust 使用泛型来完成多态 # Rust异步网络编程 Rust学习 红黑树新解(删除) 红黑树新解(插入) WCF快速創建 dropdownlist - liufu627 - 博客园 ArcGIS安装 泛型OraHelper - liufu627 - 博客园 让SendKeys支持空格键 - liufu627 - 博客园 标点符号的英文说法 Hashtable 让哈希表顺序输出。 PDA datagrid问题 日期格式化 - liufu627 - 博客园 JSON.net的使用 关于C#测试Oracle数据库链接的问题
Closure move 数值类型与引用类型的区别
liufu627 · 2020-03-26 · via 博客园 - liufu627

Posted on 2020-03-26 01:20  liufu627  阅读(216)  评论()    收藏  举报

在使用 闭包+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);   

}