在同一文件中定义的枚举构造函数不再解析.
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,它就有效.现在,它认为,Global在match语句是有约束力的,并因此无可辩驳!
这种行为是最近的 - 11月11日晚上成功编译了上面的代码.按照目前的行为是怎么回事,为什么Some,Ok,等不需要限定路径?
正如您所注意到的,最近,枚举更改为使用其类型名称来确定变体的范围。
标准库具有变体的显式重新导出,因此它们可以与类型相邻使用(例如,对于链接的精确示例,有core::option::None一个别名core::option::Option::None),这就是为什么它们在其模块中可以不合格地使用。
然而,这里有一个技巧:None, Some, Err,Ok仅在默认情况下可用,因为它们位于prelude 中,默认情况下将其导入到每个模块中。也就是说,命名空间的更改并没有改变为什么这些变体在大多数 Rust 代码中不需要限定。
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |