Enums 枚举错误:未解析的名称

Enums 枚举错误:未解析的名称,enums,rust,Enums,Rust,在同一文件中定义的枚举构造函数不再解析 enum Mode { Global, Local, } fn which_mode() -> Mode { Global } fn main() { match which_mode() { Global => println!("Global"), Local => println!("Local"), } } 编译器在函数的哪个模式中给出了一个错误“未解

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

enum Mode {
    Global,
    Local,
}

fn which_mode() -> Mode {
    Global
}

fn main() {
    match which_mode() {
        Global => println!("Global"),
        Local  => println!("Local"),
    }
}
编译器在函数
的哪个模式中给出了一个错误“未解析名称
Global
”。当我将其限定为
Mode::Global
时,它就可以工作了。现在,它认为
match
语句中的
Global
是一个绑定,因此是无可辩驳的

这种行为是最近发生的——11月11日晚间成功编译了上述代码。当前的行为就是这样,为什么
某些
确定
等不需要限定路径?

正如您所注意到的,枚举已更改为具有限定路径

标准库具有,因此它们在类型附近可用(例如,对于链接在那里的精确示例,
core::option::None
core::option::option::None
)的别名),这就是它们在其模块中可用的原因


然而,这里有一个技巧:
None
部分
Err
Ok
仅在默认情况下可用,因为前奏曲在默认情况下导入到每个模块中。也就是说,名称空间的更改并没有改变为什么这些变体在大多数Rust代码中不需要鉴定。

事实上,我花了几分钟才了解到Rust将
匹配中的
全局
视为绑定。有时,我希望Rust在尝试绑定时能够区分名称的首字母小写和大写:大写表示enum(无绑定);小写意味着绑定。我面临着同样的错误,我无法从文档中理解如何让sigma.ml的示例工作。如何做到这一点?@AlexanderSupertramp:为了使示例有效,请限定所有
enum
实例。将
Global
更改为
Mode::Global
并将
Local
更改为
Mode::Local
。更改所有引用非常重要。