gpt4 book ai didi

enums - 在 crate 中时无法在范围内获取 Rust 枚举

转载 作者:行者123 更新时间:2023-11-29 07:59:10 33 4
gpt4 key购买 nike

Editor's note: The code in this question is from a version of Rust prior to 1.0. The underlying system of how enums are imported was changed for Rust 1.0.

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

日志/mod.rs:

pub enum Level {
Debug,
Normal,
}

pub struct Log {
pub log_level: Level,
}

主要.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 };
}

最佳答案

使用rust 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,
};
}

Rust 1.0 之前

您需要按名称导入每个枚举变体,而不仅仅是枚举的名称,以便使用其非限定名称。将main.rs中的第二行改为

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

或者,您可以使用限定名称,而不是路径的 Level:: 部分,因为枚举变体不像 C++ 枚举类那样具有命名空间。

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

关于enums - 在 crate 中时无法在范围内获取 Rust 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25415490/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com