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)); } |