Module 如何访问main.rs中已写入同一软件包中不同目录的文件中的函数
我想调用main.rs文件中的函数。我在与main.rs相同的src文件夹中创建了一个目录名“library” src/main.rsModule 如何访问main.rs中已写入同一软件包中不同目录的文件中的函数,module,rust,rust-cargo,rust-crates,Module,Rust,Rust Cargo,Rust Crates,我想调用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 {}",
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中调用此函数名时,编译器抛出一个错误:
错误[E0583]:找不到模块库的文件
我想我错过了什么。正确的方法是什么?请记住,library目录只是一个普通目录,而不是一个货物包在src目录中创建一个名为library.rs的文件,然后在library.rs中编写以下代码:
pub mod file;
然后从主文件中访问与当前相同的函数。这样它将正常工作
你也可以遵循这个方法
您可以使用rust所拥有的库的概念。 只需创建一个具有--lib标志的库项目
cargo build library --lib
做完之后。您将在Cargo.toml中的依赖项部分编写此代码
您甚至可以使用目录的绝对路径
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
}
//name of the second file will be treated as module here
pub mod name1;
fn main() {
println!("{}", name1::name(4));
}
pub fn name(a: i32) -> i32 {
println!("from diff file {}", a);
a * a
}
main.rs将类似于:
//no need to specify "pub mod name1;" explicitly
pub fn name(a: i32) -> i32 {
println!("from diff file {}", a);
a * a
}
//name of the second file will be treated as module here
pub mod name1;
fn main() {
println!("{}", name1::name(4));
}
pub fn name(a: i32) -> i32 {
println!("from diff file {}", a);
a * a
}
使用库
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"}
d) 最后,您的主要.rs将是:
//importing library in thescope
use file;
fn main() {
println!("{}", file::name(4));
}
这并不能解决问题。该错误与我将文件名更改为library.rsa的错误相同。如果要删除您在src目录中创建的“library”目录,请不要从其他文件中删除它,而是从同一src目录中的其他目录调用该函数!您的问题不是调用函数。您发布的错误消息是关于您的
mod库的代码>语句。Rust编译器应该在错误消息下面显示该行。简而言之,问题的解决方案是:将library/file.rs
重命名为library/mod.rs
。您还应该删除pub mod name1
,因为通常不使用内联mod
定义。我希望这有帮助。但我建议你通读相关问题的答案。