Существует ли более простой способ связать все совпадение при использовании нескольких совпадений? - PullRequest
0 голосов
/ 13 декабря 2018

Привязка переменной к выражению совпадения может быть выполнена с помощью @ и имени переменной, например:

#[derive(Debug)]
enum Foo {
    First,
    Second,
    Third,
    Fourth,
}

fn bar(f: Foo) {
    match f {
        e @ Foo::First => println!("{:?}", e),
        _ => {}
    }
}

Если вы хотите связать e с несколькими совпадениями, вы должны повторитьпривязка на каждую возможность.

fn bar(f: Foo) {
    match f {
        e @ Foo::First | e @ Foo::Second | e @ Foo::Fourth => println!("{:?}", e),
        _ => {}
    }
}

Есть ли более простой способ сделать это?

1 Ответ

0 голосов
/ 13 декабря 2018

Если вы хотите продолжать использовать сопоставление с образцом, в настоящее время невозможно избежать повторения привязки.Однако, как только RFC 2535 будет реализован, вы сможете вложить шаблоны 'ИЛИ' следующим образом:

fn bar(f: Foo) {
    match f {
        e @ (Foo::First | Foo::Second | Foo::Fourth) => println!("{:?}", e),
        _ => {}
    }
}

Проблема отслеживания для реализации здесь: https://github.com/rust-lang/rust/issues/54883

...