• rust所有权


    所有权与函数

    fn main() {
       let s = String::from("hello");
       takes_ownership(s); //s的值移动到函数里
       
       let x = 5; //x进入作用域
       makes_copy(x); //x应该移动到函数里,但是i32是copy,所以后面可以继续使用x。
    
       println!("x is {}",x);
       //下面这句编译会出错, ^ value borrowed here after move
       //println!("s is {}",s);
    
    
    
    
    }
    
    fn takes_ownership(some_string:String){
    
        println!("{}",some_string);
    } //some_string离开作用域并调用drop方法。占用的内存释放
    
    fn makes_copy(some_integer: i32) {
        println!("{}",some_integer);
    }
    

    返回值与作用域

    fn main() {
        let s1 = gives_ownership(); //函数返回值some_string移动给s1
        let s2 = String::from("hello");  //s2进入作用域
        let s3 = take_and_give_back(s2); //s2移动但函数,然后移交给s3。最终只有s3有效
    
    }
    
    fn gives_ownership() -> String {
        let some_string = String::from("hello");
        some_string //因为some_string是String类型,所以这里做移动操作
    }
    
    fn take_and_give_back(a_string: String) -> String {
         a_string
    }
    

    引用的使用

    //为了能够返回函数的值以及其值的一些属性,我们可以使用引用
    //类似go的指针吧,只获取值不获取所有权。
    fn main() {
        //因为默认不允许修改引用的值,所以加mut。
        let mut s = String::from("hello world");
    
        //let s1 = &mut s;
        //但是要注意:在特定作用域中的特定数据有且只有一个可变引用。
        //s1已经引用了,s2就不能再用,避免了数据竞争
    
        //let s2 = &mut s;
         
        // println!("{}", s1);
        //可以使用大括号来创建一个新的作用域,s1和s2的作用域不同。
        {
            let s1 = &mut s;
            println!("s1 {}", s1);
        }
        let s2 = &mut s;
        println!("s2{}", s2);
    
       // change(&mut s);
        
    }
    
    // fn change(some_string: &mut String){
    //     some_string.push_str(",world");
    // }
    

    注意:同一个区域不允许可变和不可变引用同时存在例如下面这样

    let mut s = String::from("hello world");
    let s1=&s;
    let s2=&s;
    //println("{},{}",s1,s2); //s1,s2调用之后失效,下面的可变引用s3才能生效。
    let s3=&mut s;
    
    
  • 相关阅读:
    Hibernate 学习-3
    Hibernate反向工程使用心得
    MyEclipse中自动整合Spring3+Hibernate/JPA
    jsp页面不显示问题
    jstl获取当前系统时间的方法
    js实现12小时时钟
    从servlet跳到jsp页面,并用jstl 进行判断和显示方法
    jsp调用js文件时出现乱码
    常见异常总结
    js实现表单验证
  • 原文地址:https://www.cnblogs.com/c-x-a/p/11974880.html
Copyright © 2020-2023  润新知