Доступ к полю структуры по переменной - PullRequest
1 голос
/ 05 января 2020

Я хочу перебирать поля структуры и получать доступ к соответствующему значению для каждой итерации:

#[derive(Default, Debug)]
struct A {
    foo: String,
    bar: String,
    baz: String
}


fn main() {
    let fields = vec!["foo", "bar", "baz"];
    let a: A = Default::default();

    for field in fields {
        let value = a[field] // this doesn't work
    }
}

Как получить доступ к полю по переменной?

Обновление

Я бы предпочел вместо этого использовать HashMap:

fn main() {
    let mut B = HashMap::new();
    B.insert("foo", 1);
    B.insert("bar", 2);
    B.insert("baz", 3);

    let fields = vec!["foo", "bar", "baz"];

    for &field in &fields {
        let value = B.get(field);
    }
}

1 Ответ

2 голосов
/ 05 января 2020

Rust не имеет способа итерации непосредственно по своим полям. Вместо этого вы должны использовать тип коллекции, такой как Vec, массив или одну из коллекций в std::collections, если ваши данные семантически представляют коллекцию какого-то рода.

Если вы все еще чувствуете необходимость перебирать поля, возможно, вам нужно пересмотреть свой подход к своей задаче и посмотреть, нет ли более идиоматического / правильного способа выполнить sh it

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...