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
。更改所有引用非常重要。