3

我想在 main.rs 文件中调用一个函数。我在与 main.rs 相同的 src 文件夹中创建了一个目录名称“库”。

src/main.rs

mod library;

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

src/库/file.rs

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

当我在 main.rs 中调用这个函数名时,编译器会抛出一个错误:

错误[E0583]:找不到模块库的文件

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

4

3 回答 3

2

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

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));
}
于 2019-11-14T15:52:48.733 回答
1

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

pub mod file;

比现在从你的主文件中访问相同的功能。它会正常工作。

你也可以按照这个方法

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

于 2019-11-14T15:01:31.993 回答
0

您可以使用 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));
}
于 2019-11-14T15:11:56.457 回答