提问人:stefanprokopdev 提问时间:5/1/2022 更新时间:5/1/2022 访问量:470
在 Rust 中返回可变映射引用
Returning mutable Map reference in Rust
问:
我的目标是以编程方式添加一些开发依赖项。Cargo.toml
我正在使用板条箱()。toml
toml = { 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_mut
Option<&mut Table>
Table
Map<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
#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_content
Option
as_table_mut
评论
Cargo.toml
dev_deps.entry(name).or_insert(value);
cargo_toml_content
toml::value::Table
toml::Value
cargo_toml_content
toml::Value