Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust中未解析的枚举数名称_Rust - Fatal编程技术网

Rust中未解析的枚举数名称

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;

按照生锈指南,我想运行第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;

    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请求,将此信息也添加到指南中。还值得一提的是,还导出了它导出的枚举的变体,这就是为什么一些和更高版本的变体不需要经过鉴定的原因。我今天打开了一个请求,将这些信息也添加到指南中