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;

    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

指南遗漏了什么,我错过了什么?在 Rust 0.13 上。 rustc 0.13.0-nightly (fac5a0767 2014-11-26 22:37:06 +0000)

感谢您的帮助。

最佳答案

这不是错误;不久前an RFC on enum variants scoping已实现。现在枚举变体在它们各自的枚举范围内,所以你需要这样写:

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"),
    }
}

您可以使用 glob 导入恢复到旧行为:

#![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 的稳定)

关于rust - Rust 中未解析的枚举器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307694/

相关文章:

rust - 可以吗?是否为Option和Result以外的类型定义了运算符?

rust - 带后缀的数字文字,比如 0u8,在 Rust 中意味着什么?

Rust:拆分字符串以获取单词及其位置

generics - 如何调用许多不同类型的函数?

rust - 在迭代可变成员时访问不可变方法

performance - 如何使用对键的引用更新 HashMap 中的条目?

rust - 为什么我不必为类型实现 Any 特性,即使它是必需的?

rust - 为什么在背靠背的 println 和 print 语句之间有停顿?

rust - 我应该为二维数组使用什么类型?

rust - `return 5;` 是 Rust 中的语句或表达式吗?