Rust学习笔记--Borrowing

Rust学习中绕不过的新概念Ownership, 由于Ownership的转移,导致很多使用上很麻烦, Rust又搞了一个Borrowing的概念来规避这些麻烦. Borrowing概念我的理解比较类似C/C++的引用.

Rust学习笔记--Borrowing_第1张图片

其中s1,s 都是在stack中占用空间, s1指向Heap中的string的空间“hello”, s则是指向s1.这样通过对变量s的Ownership的转移来解决s1的Ownership不被转移.

fn main() {
    let s1 = String::from("hello");

    let len = calculate_length(&s1);

    println!("The length of '{}' is {}.", s1, len);
}

fn calculate_length(s: &String) -> usize {
    s.len()
}

fn calculate_length_error(s: String) -> usize {
    s.len()
}

如果caluate_length_error的方法传递参数s,则会导致s1的Ownership进行转移, printlin中输出s1的时候会出现编译错误.

这里要注意的是s1是非mut的, 也就是不可修改的,所以在calulate_length中是不能修改s1的内容的.如下会出现错误

fn main() {
    let s = String::from("hello");

    change(&s);
}

fn change(some_string: &String) {
    some_string.push_str(", world");
}

解决方法就是通过mut关键字.

fn main() {
    let mut s = String::from("hello");

    change(&mut s);
}

fn change(some_string: &mut String) {
    some_string.push_str(", world");
}

你可能感兴趣的:(rust,学习,笔记)