首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能借用一个盒式矢量内容作为可变?

为什么我不能借用一个盒式矢量内容作为可变?
EN

Stack Overflow用户
提问于 2015-02-07 19:01:33
回答 2查看 1.8K关注 0票数 5

为什么这不编译:

代码语言:javascript
复制
fn main() {
    let mut b = Box::new(Vec::new());
    b.push(Vec::new());
    b.get_mut(0).unwrap().push(1);
}

虽然这样做:

代码语言:javascript
复制
fn main() {
    let a = Box::new(Vec::new());
    let mut b = *a;
    b.push(Vec::new());
    b.get_mut(0).unwrap().push(1);
}

这也确实是:

代码语言:javascript
复制
fn main() {
    let mut b = Vec::new();
    b.push(Vec::new());
    b.get_mut(0).unwrap().push(Vec::new());
    b.get_mut(0).unwrap().get_mut(0).unwrap().push(1)
}

对我来说,第一个和第三个在概念上是相同的--一个整数的Box,一个整数的Vec子,一个VecVec的,一个整数的,但是最后一个,导致每个向量是可变的,而第一个,使得内部向量是不可变的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-08 21:25:36

至少在Rust 1.25.0中,所有三个原始示例都能工作。这是以前版本的Rust中的一个bug。

票数 3
EN

Stack Overflow用户

发布于 2015-02-07 19:34:57

在以可变的形式访问值之前,需要将其解压缩:

代码语言:javascript
复制
fn main() {
    let mut b = Box::new(Vec::new());
    b.push(Vec::new());
    (*b).get_mut(0).unwrap().push(1);
}

这是因为.操作符使用Deref特征而不是DerefMut

实现这一目标的最佳途径是:

代码语言:javascript
复制
fn main() {
    let mut b = Box::new(Vec::new());
    b.push(Vec::new());
    b[0].push(1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28386120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档