我正在解析这个
[xxxxx]
drive0={}
drive1={path="xxxx"}
...
有时有路,有时没有。
我有工作代码,但我仍在尝试学习 rust 惯用的做事方式。代码:
for i in 0..8 {
let drive_name = format!("drive{}", i);
if dmap.contains_key(&drive_name) {
if let Some(d) = config[drive_name].as_table() {
this.units.push(Rkunit::new(true));
if d.contains_key("path") {
if let Some(path) = d["path"].as_str() {
let file = OpenOptions::new()
.read(true)
.write(true)
.create(true)
.open(path)
.unwrap();
this.units[i].file.replace(file);
}
}
} else {
this.units.push(Rkunit::new(false));
}
}
}
我期望
if let Some(path) = d["path"].as_str()
(即没有if d.contains()
线)
将处理这两种情况——即没有“路径”和“路径”不是字符串,但它没有。也一样contains_key(drive_name)
。
我尝试了各种猜测语法,看看我是否可以避免另一个嵌套的 if 并且可以找到一个。
那么有没有更好的方法,或者这是否尽可能好。欢迎对解析 toml 的任何其他评论。