【发布时间】:2020-06-28 12:17:38
【问题描述】:
查看下面的 Rust 代码。它编译
fn main() {
let vec0 = Vec::new();
let mut vec1 = fill_vec(vec0);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
vec1.push(88);
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
}
fn fill_vec(mut vec: Vec<i32>) -> Vec<i32> {
vec.push(22);
vec.push(44);
vec.push(66);
vec
}
在这里,我将vec0 声明为immutable,但fill_vec 接受一个可变向量。根据函数签名,Rust 似乎正在改变所传递参数的性质。
我的问题是,这显然看起来像是“射中自己的脚”的瞬间。为什么 Rust 允许这样做?或者,这真的安全吗?我错过了什么?
【问题讨论】:
-
@E_net4isadownvote 这个问题似乎比链接的重复候选人更笼统。
标签: rust immutability move-semantics borrow-checker