在 Rust 中返回可变映射引用

Returning mutable Map reference in Rust

提问人:stefanprokopdev 提问时间:5/1/2022 更新时间:5/1/2022 访问量:470

问:

我的目标是以编程方式添加一些开发依赖项。Cargo.toml

我正在使用板条箱()。tomltoml = { version = "0.5.8", features = ["preserve_order"] }

这是我尝试获取 dev 依赖项的 Map 或在未定义 dev deps 时创建新 Map 的代码部分。

let mut dev_deps = cargo_toml_content
    .get_mut("dev-dependencies")
    .and_then(Value::as_table_mut)
    .unwrap_or_else(|| ???);

代码部分返回 where is 。如果函数没有返回任何内容,我想在块中初始化一个新的 Map 并返回它。Value::as_table_mutOption<&mut Table>TableMap<String, Value>unwrap_or_else

我能够返回一个新的地图/表格,但我不知道如何返回地图的可变引用。我正在为所有权问题而苦苦挣扎,例如当我使用这样的东西时:returns a reference to data owned by the current function

...
.unwrap_or_else(|| {
    let mut table = Table::default();
    &mut table
});

那么我应该怎么做(以及如何)正确返回 Table 的可变引用呢?或者有没有更好的解决方案来解决这个问题?

参考 可变 所有权

评论

0赞 Chayim Friedman 5/1/2022
您要对生成的表执行什么操作?
0赞 stefanprokopdev 5/1/2022
我想在那里找到或添加(缺少的)开发依赖项,然后将结果写入 Something like this:Cargo.tomldev_deps.entry(name).or_insert(value);
0赞 Dogbert 5/1/2022
是什么类型?是 还是 ?cargo_toml_contenttoml::value::Tabletoml::Value
0赞 stefanprokopdev 5/1/2022
的类型是cargo_toml_contenttoml::Value

答:

0赞 Chayim Friedman 5/1/2022 #1

您可以在回调之外创建映射:

let mut empty = Table::default();
let mut dev_deps = cargo_toml_content
    .get_mut("dev-dependencies")
    .and_then(Value::as_table_mut)
    .unwrap_or(&mut empty);

但最好只是.match

如果无论如何都想在最后重新插入地图,最好从头开始放在那里。

评论

0赞 Niklas Mohrin 5/1/2022
这可能有点误导。因为这不会插入 ,而只会插入到 临时返回的cargo_toml_contentOptionas_table_mut