枚举错误:未解析的名称

JON*_*vas 5 enums rust

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

enum Mode {
    Global,
    Local,
}

fn which_mode() -> Mode {
    Global
}

fn main() {
    match which_mode() {
        Global => println!("Global"),
        Local  => println!("Local"),
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器Global在函数中给出错误"未解析的名称" which_mode.当我将其限定为合格时Mode::Global,它就有效.现在,它认为,Globalmatch语句是有约束力的,并因此无可辩驳!

这种行为是最近的 - 11月11日晚上成功编译了上面的代码.按照目前的行为是怎么回事,为什么Some,Ok,不需要限定路径?

huo*_*uon 4

正如您所注意到的,最近,枚举更改为使用其类型名称来确定变体的范围

标准库具有变体的显式重新导出,因此它们可以与类型相邻使用(例如,对于链接的精确示例,有core::option::None一个别名core::option::Option::None),这就是为什么它们在其模块中可以不合格地使用。

然而,这里有一个技巧:None, Some, Err,Ok仅在默认情况下可用,因为它们位于prelude 中,默认情况下将其导入到每个模块中。也就是说,命名空间的更改并没有改变为什么这些变体在大多数 Rust 代码中不需要限定。