Rust - Borrowing

Rust - Borrowing 首页 / Rust入门教程 / Rust - Borrowing

将变量的所有权传递给另一个函数然后返回所有权是非常不便的, Rust支持借位Borrowing的概念,其中值的所有权临时转移到实体,然后又返回到原始所有者实体。

考虑以下内容-

链接:https://www.learnfk.comhttps://www.learnfk.com/rust/rust-borrowing.html

来源:LearnFk无涯教程网

fn main(){

   let v=vec![10,20,30];
   print_vector(v);
   println!("{}",v[0]); //这一行给出了错误
}
fn print_vector(x:Vec<i32>){
   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

这是因为一旦所有权转移到另一个函数,原来拥有该变量或值的函数将不再使用该变量或值。

Borrowing

当一个函数暂时将对变量/值的控制权转移给另一个函数时,这称为借位,这是通过将引用传递给变量(&var_name)而不是将变量/值本身传递给函数来实现的,在将控件传递给的函数完成执行之后,变量/值的所有权将转移到变量的原始所有者。

fn main(){

   let v=vec![10,20,30];
   print_vector(&v); //传递引用
   println!("Printing the value from main() v[0]={}",v[0]);
}
fn print_vector(x:&Vec<i32>){
   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("LearnFKPoint");
   display(&mut 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"); 
   //修改实际字符串,名称
}

main()函数将变量 name 的可变引用传递给 display()函数,显示函数将一个附加字符串附加到原始 name 变量中。

param_name value is :LearnFKPoint
The value of name after modification is:LearnFKPoint Rocks

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

零基础学Python -〔尹会生〕

程序员进阶攻略 -〔胡峰〕

玩转webpack -〔程柳锋〕

设计模式之美 -〔王争〕

大厂晋升指南 -〔李运华〕

小马哥讲Spring AOP编程思想 -〔小马哥〕

朱涛 · Kotlin编程第一课 -〔朱涛〕

React Native 新架构实战课 -〔蒋宏伟〕

结构会议力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)