同一文件中定义的枚举构造函数不再解析。
enum Mode {
Global,
Local,
}
fn which_mode() -> Mode {
Global
}
fn main() {
match which_mode() {
Global => println!("Global"),
Local => println!("Local"),
}
}
编译器发出错误"未解析的名称Global
"在函数which_mode
中。当我将其限定为Mode::Global
时,它就有效。现在,它认为Global
语句中的match
是绑定,因此无可辩驳!
此行为是最近的 - 11月11日晚上成功编译了上述代码。有了这种当前行为,为什么Some
,Ok
,等不需要合格的路径?
答案 0 :(得分:4)
正如您所注意到的,very recently,枚举已更改为variants scoped with their type name。
标准库有explicit reexports of the variants,因此它们可以在类型旁边使用(例如,对于链接的精确示例core::option::None
是core::option::Option::None
的别名),这就是为什么它们是在他们的模块中不合格。
但是,这里有一个技巧:None
,Some
,Err
,Ok
仅在默认情况下可用,因为they are in前导,导入默认情况下进入每个模块。也就是说,命名空间的更改并没有改变为什么这些变体在大多数Rust代码中都不需要限定。