Enums 在板条箱中时无法在作用域中获取锈蚀枚举

Enums 在板条箱中时无法在作用域中获取锈蚀枚举,enums,rust,rust-obsolete,Enums,Rust,Rust Obsolete,编者按:这个问题中的代码来自Rust 1.0之前的版本。如何导入枚举的基础系统已更改为Rust 1.0 这看起来应该很容易(模拟C/C++枚举),但我无法让它工作。我只是想使用板条箱中的枚举,但无论我做什么尝试,这似乎都不起作用。我是否遗漏了一些关于Rust枚举的内容(它们不能像旧的C/C++枚举那样使用) 日志/模块rs: pub enum Level { Debug, Normal, } pub struct Log { pub log_level: Level,

编者按:这个问题中的代码来自Rust 1.0之前的版本。如何导入枚举的基础系统已更改为Rust 1.0

这看起来应该很容易(模拟C/C++枚举),但我无法让它工作。我只是想使用板条箱中的枚举,但无论我做什么尝试,这似乎都不起作用。我是否遗漏了一些关于Rust枚举的内容(它们不能像旧的C/C++枚举那样使用)

日志/模块rs:

pub enum Level {
    Debug,
    Normal,
}

pub struct Log {
    pub log_level: Level,
}
main.rs:

extern crate project;
use project::log::{Log, Level};

fn main() {
    // error: unresolved name `Normal`.
    let logger = Log { log_level: Normal };

    // unresolved name `Level::Normal`.
    let logger = Log { log_level: Level::Normal };

    // unresolved name `log::Level::Normal`.
    let logger = Log { log_level: log::Level::Normal };

    // unresolved name `project::log::Level::Normal`.
    let logger = Log { log_level: project::log::Level::Normal };
}
锈1.0 枚举变量现在以枚举名称命名。这两个选项按原样工作:

extern crate project;

use project::log::{Level, Log};

fn main() {
    let logger = Log {
        log_level: Level::Normal,
    };

    let logger = Log {
        log_level: project::log::Level::Normal,
    };
}
您还可以导入模块:

extern crate project;

use project::log;

fn main() {
    let logger = log::Log {
        log_level: log::Level::Normal,
    };
}
或者,您甚至可以导入所有枚举变量:

extern crate project;

use project::log::{Log, Level::*};

fn main() {
    let logger = Log {
        log_level: Normal,
    };
}
锈前1.0 您需要按名称导入每个枚举变量,而不仅仅是按枚举的名称导入,以便使用其非限定名称。将main.rs中的第二行更改为

use project::log::{Log, Debug, Normal};

交替地,您可以使用限定名,而不使用<代码>级别::路径的一部分,因为EnUM变异体没有象C++类枚举类那样命名空间。

use project::log;
... Log { log_level: log::Normal };