Jef*_*lle 3 enums rust rust-obsolete
编者按:本题代码来自Rust 1.0之前的版本。Rust 1.0 更改了如何导入枚举的底层系统。
这看起来应该很容易(模拟 C/C++ 枚举),但我无法让它工作。我只是想使用板条箱中的枚举,但无论我尝试什么,这似乎都不起作用。我是否遗漏了一些关于 Rust 枚举的信息(它们不能像旧的 C/C++ 枚举一样使用)?
日志/mod.rs:
pub enum Level {
Debug,
Normal,
}
pub struct Log {
pub log_level: Level,
}
Run Code Online (Sandbox Code Playgroud)
主.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 };
}
Run Code Online (Sandbox Code Playgroud)
枚举变体现在在枚举名称下命名。这两个选项按原样工作:
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,
};
}
Run Code Online (Sandbox Code Playgroud)
您还可以导入模块:
extern crate project;
use project::log;
fn main() {
let logger = log::Log {
log_level: log::Level::Normal,
};
}
Run Code Online (Sandbox Code Playgroud)
或者您甚至可以导入所有枚举变体:
extern crate project;
use project::log::{Log, Level::*};
fn main() {
let logger = Log {
log_level: Normal,
};
}
Run Code Online (Sandbox Code Playgroud)
您需要按名称导入每个枚举变体,而不仅仅是枚举的名称,以便使用其非限定名称。将 main.rs 中的第二行更改为
use project::log::{Log, Debug, Normal};
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用不包含Level::路径部分的限定名称,因为枚举变体不像 C++ 枚举类那样具有命名空间。
use project::log;
... Log { log_level: log::Normal };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1775 次 |
| 最近记录: |