0

私はこれを解析しています

[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 の解析に関するその他のコメントは歓迎します。

4

3 に答える 3