如何使Rust可变引用不可变?

如何使Rust可变引用不可变?,rust,Rust,我试图在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;

我试图在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;
}
对于代码所做的事情,您可能应该阅读。您的变量
数据
已经是不可变的,但它包含一个可变引用。您不能重新分配
数据
,但可以更改指向的值

如何将可变引用转换为不可变绑定


它已经是一个不可变的绑定,因为您无法更改
数据的内容。

Hmm此代码位于返回
Vec
的函数中。如果我返回
和*data
,我会得到一个错误
预期结构
std::vec::vec
,找到引用
。如果我返回
*数据*,我会收到一个错误
无法移出借用的内容
。那是关于借钱人的事吗?我解决这个问题的方法是返回
data.clone()`但我试图提高它的性能,但我想借用检查器可能不允许这样做,因为我正在函数中创建向量。也许我的问题措辞错误,但我如何从
数据
中获得
Vec
?@jbrown听起来像是说你想要
让mut data=Vec![1, 2, 3]; 返回数据。是的,这就是我要找的。谢谢我会重读关于易变性的文件