我正在尝试在Rust中将一个可变向量转换为不可变向量。我以为这会起作用,但事实并非如此:
let data = &mut vec![];
let x = data; // I thought x would now be an immutable reference
我如何将可变引用转换为不可变绑定?
我正在尝试在Rust中将一个可变向量转换为不可变向量。我以为这会起作用,但事实并非如此:
let data = &mut vec![];
let x = data; // I thought x would now be an immutable reference
我如何将可变引用转换为不可变绑定?
解除引用,然后重新引用该值:
fn main() {
let data = &mut vec![1, 2, 3];
let x = &*data;
}
根据你的代码,你应该阅读在变量名前面和冒号后面使用`mut`的区别是什么?。你的变量data
已经是不可变的,但它包含一个可变引用。你不能重新分配data
,但可以更改指向的值。
我怎样才能将可变引用变为不可变绑定?
它已经是一个不可变绑定了,因为你无法更改data
的值。
Vec<String>
的函数中。如果我返回 &*data
,会出现错误 expected struct
std::vec::Vec, found reference
。如果我返回 *data
,会出现错误 cannot move out of borrowed content
。这是借用检查器的问题吗?我解决这个问题的方法是返回 data.clone()
,但我试图让它更高效,但我认为借用检查器可能不允许这样做,因为我在函数中创建了向量。也许我表达的不太对,但我如何从 data
中获取 Vec<String>
呢? - jbrownlet mut data = vec![1, 2, 3]; return data;
。 - Shepmasterfn main() {
let data = &mut vec![1, 2, 3];
let x: &_ = data;
println!("{x:?}");
// This will fail as x immutable
// *x = vec![]
}
当你没有指定类型时,编译器会假设你想要相同的类型,这恰好是一个&mut Vec<_>
。