Rust中未解析的枚举数名称
按照生锈指南,我想运行第8节和第9节中的示例Rust中未解析的枚举数名称,rust,Rust,按照生锈指南,我想运行第8节和第9节中的示例 enum MOrdering { MLess, MEqual, MGreater, } fn cmp(a: int, b: int) -> MOrdering { if a < b { MLess } else if a > b { MGreater } else { MEqual } } fn main() { let x = 5i; let y = 3i;
enum MOrdering {
MLess,
MEqual,
MGreater,
}
fn cmp(a: int, b: int) -> MOrdering {
if a < b { MLess }
else if a > b { MGreater }
else { MEqual }
}
fn main() {
let x = 5i;
let y = 3i;
match cmp(x, y) {
MLess => println!("less"),
MGreater => println!("greater"),
MEqual => println!("equal"),
}
}
这不会编译,并且与示例相同,只是重命名了枚举,以确保它不会与core::cmp::Ordering冲突
以下是我在编译时遇到的错误:
rustc src/main.rs
src/main.rs:8:16: 8:21 error: unresolved name `MLess`. Did you mean `a`?
src/main.rs:8 if a < b { MLess }
^~~~~
src/main.rs:9:21: 9:29 error: unresolved name `MGreater`.
src/main.rs:9 else if a > b { MGreater }
^~~~~~~~
src/main.rs:10:12: 10:18 error: unresolved name `MEqual`. Did you mean `a`?
src/main.rs:10 else { MEqual }
^~~~~~
error: aborting due to 3 previous errors
我遗漏了什么,导游遗漏了什么?在锈上0.13。
rustc 0.13.0-每晚fac5a0767 2014-11-26 22:37:06+0000
谢谢你的帮助。这不是一个bug;不久前已经实施。现在,枚举变量的作用域位于其各自的枚举下,因此您需要编写以下代码:
enum MOrdering {
MLess,
MEqual,
MGreater,
}
fn cmp(a: int, b: int) -> MOrdering {
if a < b { MOrdering::MLess }
else if a > b { MOrdering::MGreater }
else { MOrdering::MEqual }
}
fn main() {
let x = 5i;
let y = 3i;
match cmp(x, y) {
MOrdering::MLess => println!("less"),
MOrdering::MGreater => println!("greater"),
MOrdering::MEqual => println!("equal"),
}
}
您可以通过使用全局导入恢复到旧行为:
#![feature(globs)]
use MOrdering::*;
enum MOrdering {
MLess,
MEqual,
MGreater,
}
fn cmp(a: int, b: int) -> MOrdering {
if a < b { MLess }
else if a > b { MGreater }
else { MEqual }
}
fn main() {
let x = 5i;
let y = 3i;
match cmp(x, y) {
MLess => println!("less"),
MGreater => println!("greater"),
MEqual => println!("equal"),
}
}
注意:很快将不需要为GLOB启用功能标志,因为GLOB计划用于1.0的稳定化,这不是一个bug;不久前已经实施。现在,枚举变量的作用域位于其各自的枚举下,因此您需要编写以下代码:
enum MOrdering {
MLess,
MEqual,
MGreater,
}
fn cmp(a: int, b: int) -> MOrdering {
if a < b { MOrdering::MLess }
else if a > b { MOrdering::MGreater }
else { MOrdering::MEqual }
}
fn main() {
let x = 5i;
let y = 3i;
match cmp(x, y) {
MOrdering::MLess => println!("less"),
MOrdering::MGreater => println!("greater"),
MOrdering::MEqual => println!("equal"),
}
}
您可以通过使用全局导入恢复到旧行为:
#![feature(globs)]
use MOrdering::*;
enum MOrdering {
MLess,
MEqual,
MGreater,
}
fn cmp(a: int, b: int) -> MOrdering {
if a < b { MLess }
else if a > b { MGreater }
else { MEqual }
}
fn main() {
let x = 5i;
let y = 3i;
match cmp(x, y) {
MLess => println!("less"),
MGreater => println!("greater"),
MEqual => println!("equal"),
}
}
注意:很快将不需要为globs启用功能标志,因为globs计划在1.0下稳定运行它在0.12下工作!也许是一只虫子;我在里面看不到任何明显的东西。它在锈0.12中工作!也许是一只虫子;我在中看不到任何明显的内容。还值得一提的是,还导出了它导出的枚举的变量,这就是为什么一些和更高版本的变体不需要经过鉴定的原因。我今天打开了一个pull请求,将此信息也添加到指南中。还值得一提的是,还导出了它导出的枚举的变体,这就是为什么一些和更高版本的变体不需要经过鉴定的原因。我今天打开了一个请求,将这些信息也添加到指南中