![](/img/trans.png)
[英]Rust proc_macro_derive (with syn crate) generating enum variant for matching
[英]Cannot get Rust enum in scope when in crate
编者注:此问题中的代码来自1.0之前的Rust版本。 导入枚举的基础系统已更改为Rust 1.0。
这似乎应该很容易(模仿C / C ++枚举),但我无法让它工作。 我只是想使用来自箱子的枚举,但无论我尝试什么,这似乎都不起作用。 我是否遗漏了关于Rust枚举的内容(它们是否可以像旧的C / C ++枚举一样使用)?
登录/ mod.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 };
}
枚举变体现在在枚举名称下命名。 这两个选项按原样运行:
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,
};
}
您需要按名称导入每个枚举变体,而不仅仅是枚举的名称,以便使用其非限定名称。 将main.rs中的第二行更改为
use project::log::{Log, Debug, Normal};
或者,您可以使用限定名称,而不使用路径的Level::
部分,因为枚举变体不像C ++枚举类那样是命名空间。
use project::log;
... Log { log_level: log::Normal };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.