如何访问 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,它将正常工作。
这个方法你也可以
你可以使用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));
}
我想在 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,它将正常工作。
这个方法你也可以
你可以使用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));
}