私はこれを解析しています
[xxxxx]
drive0={}
drive1={path="xxxx"}
...
道があるときもあれば、ないときもあります。
私は動作するコードを持っていますが、まださびた慣用的なやり方を学ぼうとしています。コード:
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 を回避できるかどうか、および 1 つを見つけることができるかどうかを確認するために、さまざまな推測構文を試しました。
それで、より良い方法がありますか、それともこれが得られるのと同じくらい良いですか. toml の解析に関するその他のコメントは歓迎します。