本文概述
- 为什么借入?
- 可变引用
- 可变引用的限制
为什么借入? 之所以使用借入概念是因为以下原因:
- 借用允许对单个资源有多个引用, 但仍然服从于拥有” 单个所有者” 。
- 引用就像C中的指针一样。
- 引用是一个对象。引用有两种类型, 即可变引用和不可变引用。可变引用在复制不变引用时移动。
fn main()
{
let str=String::from("srcmini");
let len=calculate_length(&
str);
println!("length of the string {}", len);
}
fn calculate_length(s:&
String)->
usize
{
s.len()
}
【Rust引用和借入用法详解】输出
length of the string 10
在上面的示例中, calculate_length()函数将字符串str作为参数的引用, 但不占用其所有权。
let str=String::from("srcmini");
let len=calculate_length(&
str);
在上述情况下, &str是对变量str的引用, 但它并不拥有它。因此, 即使引用超出范围, 引用所指向的值也不会被删除。
fn calculate_length(s:&
String)->
usize
{
s.len()
}
在上述情况下, 变量” s” 在控件不返回到main()函数之前一直有效。当变量作为对函数的引用而不是实际值传递给函数时, 则我们无需返回值即可返回所有权。
让我们尝试修改借入的值。
fn main()
{
let x=1;
value_changed(&
x)
}
fn value_changed(y:&
i32)
{
*y=9;
}
以下是上述程序的输出:
文章图片
在上面的示例中, 由于&x是不可变的引用, 因此会引发错误。因此, 我们无法更改y的值。
可变引用 我们可以通过使用可变引用来解决上述错误。可变引用是那些可变的引用。让我们通过一个例子来理解这一点。
fn main()
{
let mut x=1;
value_changed(&
mut x);
println!("After modifying, the value of x is {}", x);
}
fn value_changed(y:&
mut i32)
{
*y=9;
}
输出
After modifying, the value of x is 9
在上面的示例中, 我们创建了一个可变引用, 即&mut x, 该引用由&i32类型的变量y指向。现在, 我们可以更改” y” 变量引用的值。我们分配9个值, 即* y = 9。因此, 值x也将变为9, 这是两个变量所引用的相同存储位置。
可变引用的限制
- 在特定范围内, 我们只能对一个数据进行可变引用。
let mut str=String::from("srcmini");
let a= &
mut str;
let b= &
mut str;
在上述情况下, 编译器将引发错误, 因为它由两个可变引用组成, 这在Rust语言中是不可能的。
- 如果程序中存在不可变的引用, 则程序中不能有可变的引用。
let mut str=String::from("srcmini");
let a= &
str;
let b=&
str;
let c=&
mut str;
在上述情况下, 编译器将引发错误, 因为在拥有不可变的引用的同时我们不能拥有可变的引用。
推荐阅读
- Rust什么是切片(详细用法————)
- Rust while循环语句用法解释
- Rust 循环语句用法解释
- Rust if语句介绍和用法图解
- Rust安装步骤详细图解
- Rust let中的if语句用法
- 气质唯美的女生专用微信头像大全_微信
- 微信PC版怎样给自己手机版微信发送信息?_微信
- 可达鸭带字搞笑表情包大全_微信