首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从&mut嵌套创建&mut MyEnum?

如何从&mut嵌套创建&mut MyEnum?
EN

Stack Overflow用户
提问于 2022-06-22 23:01:50
回答 1查看 41关注 0票数 2

假设我有以下几点:

代码语言:javascript
复制
enum Item {
  None,
  Table(Table),
  ...
}

struct Table {
  ...
}

假设我有这样的桌子:

代码语言:javascript
复制
let t = &mut Table::new();

我将如何将t&mut Table向上转换为&mut Item?如果我试图像这样直接转换:

代码语言:javascript
复制
let i = &mut Item::Table(t);

我得到了错误mismatched types expected struct Table, found &mut Table

EN

回答 1

Stack Overflow用户

发布于 2022-06-22 23:28:49

这是相当有问题的。

如果您不需要相同的地址,那么可以将其包装在Item::Table中。问题是,您需要拥有一个拥有的Table,但您只需要借用它。您可以从那里得到它,但是您需要在它的位置留下一些东西,这样引用仍然有效。您可以使用std::mem::take()Default::default()放入内部,也可以使用std::mem::replace()放置其他内容。如果您只需要暂时使用replace_with机箱,也可以使用它。

代码语言:javascript
复制
let i = &mut Item::Table(std::mem::take(t));

let i = &mut Item::Table(std::mem::replace(t, Table::new()));

replace_with::replace_with_or_abort(t, |t| {
    let mut i = Item::Table(t);

    let i_ref = &mut i;
    // Work with `i_ref`...

    match i {
        Item::Table(t) => t,
        _ => unreachable!(),
    }
}

如果你确实需要它有相同的地址,那你就倒霉了。Item没有与Table相同的布局,所以您不能这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72722847

复制
相关文章

相似问题

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