Почему не требуется вариант Варианты "Некоторые" и "Нет"?

В соответствии с docs для Option, Option - это перечисление с вариантами Some<T> и None.

Почему можно ссылаться на Some и None без их квалификации?

Например, это прекрасно работает:

let x = Option::Some(5);
match x {
    Some(a) => println!("Got {}", a),
    None => println!("Got None"),
}

Но это не скомпилируется:

enum Foo<T> {
    Bar(T),
    Baz,
}
let x = Foo::Bar(5);
match x {
    Bar(a) => println!("Got {}", a),
    Baz => println!("Got Baz"),
}

Ошибка компилятора unresolved enum variant, struct or const `Bar`

Ответ 1

Прелюдия ржавчины, которая автоматически вставлена ​​в каждый исходный файл, содержит следующую строку:

pub use option::Option::{self, Some, None};

Что приносит Option и оба его варианта в области.