- Rust 教程
- Rust - 首页
- Rust - 简介
- Rust - 环境设置
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- Rust - 常量
- Rust - 字符串
- Rust - 运算符
- Rust - 决策制定
- Rust - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- Rust - 切片
- Rust - 结构体
- Rust - 枚举
- Rust - 模块
- Rust - 集合
- Rust - 错误处理
- Rust - 泛型类型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用资源
- Rust - 快速指南
- Rust - 有用资源
- Rust - 讨论
Rust - 借用
将变量的所有权传递给另一个函数,然后返回所有权非常不方便。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<i32>){
println!("Inside print_vector function {:?}",x);
}
main 函数调用了一个函数 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<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("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() 函数将变量 name 的可变引用传递给 display() 函数。display 函数将额外的字符串追加到原始 name 变量。
输出
param_name value is :TutorialsPoint The value of name after modification is:TutorialsPoint Rocks
广告