Я столкнулся с проблемой при попытке использовать настраиваемое перечисление для нескольких файлов в Rust. Я ожидал, что смогу написать один файл, содержащий это перечисление, и ссылаться на него из нескольких файлов (file_a.rs запускает функцию, которая возвращает перечисление Shape, main.rs соответствует типу, но ожидает types :: Shape и находит file_a :: types :: Shape). В результате я ожидаю, что оба имеют тип types :: Shape, но, похоже, это не так.
В прошлом, чтобы исправить эту проблему, я просто помещал весь код, который создает эти конфликты в один и тот же файл. Это не кажется подходящим решением, и особенно не профессиональным. меня к ним, если можете).
Как я могу использовать перечисление для нескольких файлов, сохраняя при этом один и тот же тип для всех?
Вот небольшой пример, демонстрирующий проблему. Ошибки возникают в main.rs в операторе match.
Структура каталогов:
src
| main.rs
|____core
| | types.rs
| | file_a.rs
/ src / main.rs:
#[path = "./core/types.rs"]
mod types;
use types::*;
#[path = "./core/file_a.rs"]
mod file_a;
use file_a::*;
fn main()
{
match return_a_shape()
{
Shape::CIRCLE => println!("circle"), // expected enum `file_a::types::Shape`, found enum `types::Shape`
Shape::SQUARE => println!("square"), // expected enum `file_a::types::Shape`, found enum `types::Shape`
Shape::TRIANGLE => println!("triangle"), // expected enum `file_a::types::Shape`, found enum `types::Shape`
_ => println!("unknown shape"),
}
}
/ src / core /file_a.rs:
mod types;
use types::*;
pub fn return_a_shape() -> Shape
{
return Shape::CIRCLE;
}
/ src / types.rs:
pub enum Shape
{
SQUARE,
CIRCLE,
TRIANGLE,
}