首页 > 解决方案 > 如何在rust的两个文件(包括main)中包含一个文件并在两个文件中直接使用其命名空间名称?

问题描述

我有这个结构:

src
|   main.rs
|   fcfs.rs
|   proc.rs

我想同时proc.rs包含main.rsfcfs.rs。最初,我mod proc在两个文件中都使用了。这仅在 中有效main.rs,在fcfs.rs

咨询SO,我找到了一个描述路径属性的答案。

所以我有以下三个文件:

// proc.rs
#[derive(Debug, Clone)]
pub struct Proc {
    name: String,
    cpu_burst: u32, 
    priority: u32,
    time_rem: u32,
}

impl Proc {
    pub fn new(name: String,
        cpu_burst: u32,
        priority: u32,
        time_rem: u32) -> Proc {
        Proc {
            name, 
            cpu_burst,
            priority,
            time_rem,
        }
    }
}
// fcfs.rs
#![allow(dead_code)]

#[path = "./proc.rs"] mod proc;
use proc::*;

pub struct FCFSScheduler {
    procs: Vec<Proc>,
}

impl FCFSScheduler {
    pub fn new() -> FCFSScheduler {
        FCFSScheduler {
            procs: Vec::<Proc>::new()
        }
    }

    pub fn add(&mut self, t: proc::Proc) {
        self.procs.push(t);
    }
}
// main.rs
#![allow(dead_code)]

mod proc;
mod fcfs;

use proc::*;
use fcfs::*;

fn main() {
    let t = Proc::new(String::from("T1"), 1, 1, 1);
    let mut s = FCFSScheduler::new(); 
    s.add(t);
}

我的问题s.add(t)在于main.rs.

我遇到以下问题。

error[E0308]: mismatched types
  --> src\main.rs:12:11
   |
12 |     s.add(t);
   |           ^ expected struct `fcfs::proc::Proc`, found struct `proc::Proc`

这可以通过更改t为 a来解决fcfs::proc::Proc,但我想知道管理导入的更好方法,因为这听起来根本无法扩展。我怎样才能简单地包含proc.rs并在proc::Proc任何地方使用?

标签: rust

解决方案


像这样使用#[path = ..]会使 Rust 认为这proc.rs是两个独立的模块而不是一个,这就是为什么你会得到令人困惑的“预期的 Proc,找到的 Proc”错误消息。

保持模块定义在main.rs

mod proc;

您可以通过其路径访问该模块,fcfs.rs如下所示:

use crate::proc::*;

也可以看看:


推荐阅读