枚举错误:未解析的名称

时间:2014-11-20 12:58:21

标签: enums rust

同一文件中定义的枚举构造函数不再解析。

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日晚上成功编译了上述代码。有了这种当前行为,为什么SomeOk不需要合格的路径?

1 个答案:

答案 0 :(得分:4)

正如您所注意到的,very recently,枚举已更改为variants scoped with their type name

标准库有explicit reexports of the variants,因此它们可以在类型旁边使用(例如,对于链接的精确示例core::option::Nonecore::option::Option::None的别名),这就是为什么它们是在他们的模块中不合格。

但是,这里有一个技巧:NoneSomeErrOk仅在默认情况下可用,因为they are in前导,导入默认情况下进入每个模块。也就是说,命名空间的更改并没有改变为什么这些变体在大多数Rust代码中都不需要限定。