我正在尝试将可变向量转换为Rust中的不可变向量.我认为这会起作用,但它没有:
let data = &mut vec![];
let x = data; // I thought x would now be an immutable reference
Run Code Online (Sandbox Code Playgroud)
如何将可变引用转换为不可变绑定?
She*_*ter 18
取消引用然后重新引用该值:
fn main() {
let data = &mut vec![1, 2, 3];
let x = &*data;
}
Run Code Online (Sandbox Code Playgroud)
对于你的代码正在做什么,你应该阅读变量名之前和`:`之后的`mut`的区别是什么?.您的变量data
已经是不可变的,但它包含一个可变引用.您无法重新分配data
,但可以更改指向的值.
如何将可变引用转换为不可变绑定?
它已经是一个不可变的绑定,因为你无法改变它是什么data
.
现在有效的另一个解决方案是指定 x 的类型:
fn main() {
let data = &mut vec![1, 2, 3];
let x: &_ = data;
println!("{x:?}");
// This will fail as x immutable
// *x = vec![]
}
Run Code Online (Sandbox Code Playgroud)
当您不指定类型时,编译器会假定您需要相同的类型,而该类型恰好是&mut Vec<_>
.
归档时间: |
|
查看次数: |
7882 次 |
最近记录: |