совпадать с переменной против совпадения с заполнителем? - PullRequest
2 голосов
/ 29 апреля 2019
fn main() {
    let f = 1;

    match f {
        foo => {
            println!("{}",foo);
        }
    };

    match f {
        _ => {
            println!("{}",f);
        }
    };
}

Есть ли разница между двумя матчами?(оба отпечатка 1).И кто-нибудь может указать мне, где задокументирован первый матч?В книге Rust (до главы 9) упоминается только заполнитель _, но не «вы можете указать любое имя (например, foo в данном случае) в качестве условия соответствия».

1 Ответ

5 голосов
/ 29 апреля 2019

Это всего лишь шаблоны. Шаблоны более подробно описаны в книге .Существует множество форм шаблонов:

  • Константы: 1, FOO
  • enum Разрушение: Some(y), None
  • struct Деструктуризация: Point { x, y }
  • Деструктуризация кортежа: (42, foo)
  • Привязки: foo, foo @ (42, bar)
  • Диапазоны: 1 ... 42
  • Placeholder: _
  • и т. Д.

Здесь нет разницы между вашими двумя примерами, однако именованные шаблоны не часто рассматриваются как шаблоны верхнего уровня в match выражение, а точнее в под-шаблонах, таких как Some(foo).Однако именованные шаблоны чрезвычайно распространены для параметров функций и let привязок.

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