如何访问 main.rs 中的函数,该函数已写入同一包中不同目录中的文件中

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

mod library;

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

src/library/file.rs

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

我想我错过了什么。这样做的正确方法是什么?请记住,库目录只是一个普通目录而不是货物包

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

pub mod file;

比起从您的主文件访问与您正确执行的相同的功能now.Than,它将正常工作。

这个方法你也可以

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

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

cargo build library --lib

做完之后。您将在 Cargo.toml.

中的依赖项部分写入此内容
library = {path = "./src/library"}  

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

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

然后在 lib.rs 文件中写入你的库代码。

pub mod name1 {
    pub fn name(a: i32) -> i32 {
          println!("from diff file {}", a);
          a * a
    }
}

这是 main.rs 文件。

use library;

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

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

1 ) 使用模块 2 ) 使用库

使用模块

直接在src目录下main.rs旁边新建一个文件,命名为name1.rs

name1.rs 看起来像:

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

main.rs 看起来像:

//name of the second file will be treated as module here
pub mod name1;

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

使用库

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

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

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

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

[package]
name = "test_project"
version = "0.1.0"
authors = ["mohammadrajabraza <mohammadrajabraza@gmail.com>"]
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 看起来像:

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

d) 最后你的 main.rs 将是:

//importing library in thescope
use file;

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