为什么Option的Some和None变体不需要合格?

kri*_*xon 11 rust

根据文档Option,Option是一个变体Some<T>和枚举None.

为什么可以引用SomeNone不引用它们?

例如,这工作正常:

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

但这无法编译:

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

编译器的错误是 unresolved enum variant, struct or const `Bar`

Lev*_*ans 16

锈前奏,其被自动插入到每个源文件,包含此行:

pub use option::Option::{self, Some, None};
Run Code Online (Sandbox Code Playgroud)

这带来Option了它的变体范围.