rust - 如何在rust的两个文件(包括main)中包含一个文件并在两个文件中直接使用其命名空间名称?
问题描述
我有这个结构:
src
| main.rs
| fcfs.rs
| proc.rs
我想同时proc.rs
包含main.rs
和fcfs.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
任何地方使用?
解决方案
像这样使用#[path = ..]
会使 Rust 认为这proc.rs
是两个独立的模块而不是一个,这就是为什么你会得到令人困惑的“预期的 Proc,找到的 Proc”错误消息。
保持模块定义在main.rs
:
mod proc;
您可以通过其路径访问该模块,fcfs.rs
如下所示:
use crate::proc::*;
也可以看看:
推荐阅读
- c# - 使用backgroudWorker C#时出现跨线程操作错误
- python - 如何随机生成变量名?
- scala - Scala:避免使用 ._ 的案例类
- ios - 在异步方法数之后执行代码
- java - Hadoop 中的简单程序得到 ClassNotFoundException
- javascript - 使用 Velocity.js 和 JQuery 的部分转换问题 ~ Glitching Animation
- r - ggplot 条形图和错误信息
- c# - 嵌套列表表单 ASP.NET MVC - 无法弄清楚如何编写控制器代码
- javascript - React.JS = Promise/Fetch API 有重复代码,我如何捆绑到自己的函数中
- regex - 使用记事本++正则表达式更改十六进制数字大小写