📅  最后修改于: 2020-11-02 04:17:22             🧑  作者: Mango
将变量的所有权传递给另一个函数然后返回所有权是非常不便的。 Rust支持借用的概念,其中值的所有权临时转移到实体,然后又返回到原始所有者实体。
考虑以下内容-
fn main(){
// a list of nos
let v = vec![10,20,30];
print_vector(v);
println!("{}",v[0]); // this line gives error
}
fn print_vector(x:Vec){
println!("Inside print_vector function {:?}",x);
}
主要函数调用函数print_vector() 。将向量作为参数传递给此函数。向量的所有权也从main()传递给print_vector()函数。当main()函数尝试访问向量v时,以上代码将导致如下所示的错误。
| print_vector(v);
| - value moved here
| println!("{}",v[0]);
| ^ value used here after move
这是因为一旦所有权转移到另一个函数,原来拥有该变量或值的函数将不再使用该变量或值。
当一个函数暂时将对变量/值的控制权转移给另一个函数时,这称为借位。这是通过将引用传递给变量(&var_name)而不是将变量/值本身传递给函数来实现的。在将控件传递给的函数完成执行之后,将变量/值的所有权转移到变量的原始所有者。
fn main(){
// a list of nos
let v = vec![10,20,30];
print_vector(&v); // passing reference
println!("Printing the value from main() v[0]={}",v[0]);
}
fn print_vector(x:&Vec){
println!("Inside print_vector function {:?}",x);
}
Inside print_vector function [10, 20, 30]
Printing the value from main() v[0] = 10
函数可以通过使用对此类资源的可变引用来修改借用资源。可变引用以&mut为前缀。可变引用只能对可变变量进行操作。
fn add_one(e: &mut i32) {
*e+= 1;
}
fn main() {
let mut i = 3;
add_one(&mut i);
println!("{}", i);
}
main()函数声明一个可变的整数变量i ,并将i的可变引用传递给add_one() 。 add_one()将变量i的值加1。
fn main() {
let mut name:String = String::from("TutorialsPoint");
display(&mut name);
//pass a mutable reference of name
println!("The value of name after modification is:{}",name);
}
fn display(param_name:&mut String){
println!("param_name value is :{}",param_name);
param_name.push_str(" Rocks");
//Modify the actual string,name
}
main()函数将变量名的可变引用传递给display()函数。显示函数将附加字符串附加到原始名称变量。
param_name value is :TutorialsPoint
The value of name after modification is:TutorialsPoint Rocks