关于模块:如何访问main.rs中的功能,该功能已写入rust蚀相同软件包中不同目录中的文件中

How to access the function in main.rs which has been written in a file in different directory in rust in same package

本问题已经有最佳答案,请猛点这里访问。

我想在main.rs文件中调用一个函数。我在与main.rs存在的同一src文件夹中创建了一个目录名" library"。

src / main.rs

1
2
3
4
5
mod library;

fn main() {
   println!("{}", library::name1::name(4));
}

src / library / file.rs

1
2
3
4
5
6
pub mod name1 {
    pub fn name(a: i32) -> i32 {
        println!("from diff file {}", a);
        a * a
    }
}

当我在main.rs中调用此函数名称时,编译器将引发错误:

error[E0583]: file not found for module library

我想我缺少了一些东西。正确的方法是什么?请记住,库目录只是普通目录,而不是货物package


您可以通过2种不同的方式解决此问题:

1)使用模块
2)使用Library

使用模块

只需在src目录中的main.rs旁边创建一个文件,并将其命名为name1.rs

name1.rs将如下所示:

1
2
3
4
5
//no need to specify"pub mod name1;" explicitly
pub fn name(a: i32) -> i32 {
   println!("from diff file {}", a);
   a * a
}

main.rs将如下所示:

1
2
3
4
5
6
//name of the second file will be treated as module here
pub mod name1;

fn main() {
   println!("{}", name1::name(4));
}

使用库

a)创建一个库,该库位于主项目目录(即src目录的父目录)中,并运行以下命令:

1
2
//In your case library name"file"    
$ cargo new --lib file

此命令将创建另一个与您的主项目相同的名称文件目录。

b)在主项目的Cargo.toml文件的依赖项部分中添加此库(文件)

1
2
3
4
5
6
7
8
9
10
11
[package]
name ="test_project"
version ="0.1.0"
authors = ["mohammadrajabraza <[email protected]>"]
edition ="2018"


# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
file = {path ="file"}

c)使用上述命令创建库后,将在main_project> file(library)> src> lib.rs下创建一个文件。

lib.rs将如下所示:

1
2
3
4
pub fn name(a: i32) -> i32 {
             println!("from diff file {}", a);
             a * a
}

d),最后您的main.rs将是:

1
2
3
4
5
6
//importing library in thescope
use file;

fn main() {
   println!("{}", file::name(4));
}


在src目录中创建一个名为library.rs的文件,然后在library.rs中编写以下代码:

1
pub mod file;

与您现在在主文件中访问的功能相同,它将正常工作。

您也可以遵循此方法

https://github.com/Abdul-sid/PIAIC-IOT-RUST-CLASS/tree/master/13th-Oct-chapter-7-part-2/dir-mod-bin/src


您可以使用防rust的带库概念。
只需制作一个带有--lib标志的库项目即可。

1
cargo build library --lib

完成之后。您将在Cargo.toml的依赖项部分中编写此代码。

1
library = {path ="./src/library"}

您甚至可以使用目录的绝对路径。

1
library = {path ="C:/Users/Admin/Desktop/Rust/jawwad/src/library"}

然后将您的库代码写入lib.rs文件中。

1
2
3
4
5
6
pub mod name1 {
    pub fn name(a: i32) -> i32 {
          println!("from diff file {}", a);
          a * a
    }
}

这是main.rs文件。

1
2
3
4
5
use library;

fn main() {
   println!("{}", library::name1::name(4));
}