我希望有一个包含多个结构的模块,每个模块都在自己的文件中.以Math
模块为例:
Math/
Vector.rs
Matrix.rs
Complex.rs
Run Code Online (Sandbox Code Playgroud)
我希望每个结构都在同一个模块中,我将从我的主文件中使用它,如下所示:
use Math::Vector;
fn main() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然而,Rust的模块系统(开始时有点混乱)并没有提供一种明显的方法来实现这一点.它似乎只允许您将整个模块放在一个文件中.这不是质朴的吗?如果没有,我该怎么做?
我找不到如何将函数从一个文件(模块)包含(或导入,注入或其他一些单词)到另一个文件.
我开始一个新项目
$ cd ~/projects
$ cargo new proj --bin
$ cd proj
$ tree
.
|
-- Cargo.toml
-- src
|
-- main.rs
Run Code Online (Sandbox Code Playgroud)
我使用以下代码修改main.rs
并创建一个新文件a.rs
(在src
dir中):
main.rs
fn main() {
println!("{}", a::foo());
}
Run Code Online (Sandbox Code Playgroud)
a.rs
pub fn foo() -> i32 { 42 }
Run Code Online (Sandbox Code Playgroud)
我运行项目cargo run
并得到错误:
error[E0433]: failed to resolve: use of undeclared type or module `a`
--> src/main.rs:2:20
|
2 | println!("{}", a::foo());
| ^ use of undeclared type or module `a`
Run Code Online (Sandbox Code Playgroud)
似乎我需要以a …
如何在完整路径my_project/src/include_me.rs
中包含文件main.rs
?
我已经检查了依赖指南,所有这些指南似乎都包含了二进制文件.我也检查了"The Book",但其中没有一个例子以".rs"结尾.
如何include_me.rs
使用项目的其余部分进行编译?
编辑:虽然"可能重复"将是一个包含这个问题的答案的好地方,但它并不包含它.这个问题的最佳答案中的语法更加相关,并在"重复"的问题中掩盖了
我有文件结构: engine 和 utils 文件夹在同一级别。引擎包含世界文件夹(其中包含 mod.rs 和 map.rs)和 mod.rs。Utils 包含 mod.rs 和 reader.rs。
我正在尝试从阅读器访问地图,但无法使“使用”语句起作用。
实用程序/mod.rs
pub mod reader;
Run Code Online (Sandbox Code Playgroud)
引擎/mod.rs
pub mod world;
Run Code Online (Sandbox Code Playgroud)
世界/mod.rs
pub mod map;
pub struct World;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
pub mod reader;
Run Code Online (Sandbox Code Playgroud)
你不能在子目录中声明模块,还是我错过了一些愚蠢的东西?我一直在搞乱 use 语句大约半个小时,但无法让它工作。
我的目录结构:
src
main.rs
image.rs
decoders.rs
Run Code Online (Sandbox Code Playgroud)
当我尝试在 image.rs 中导入我的解码器模块时,我得到了这个:
error[E0583]: File not found for module `decoders`
Run Code Online (Sandbox Code Playgroud)
解码器.rs:
pub mod Decoders {}
Run Code Online (Sandbox Code Playgroud)
图像.rs:
mod decoders
use decoders::Decoders
pub mod Image {}
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用一个专门包装整个文件的模块,这样我就可以将属性放在整个文件上。这就是为什么它不是How to include module from another file from the same project?
奇怪的是,当我尝试在 main.rs 中导入 Image 时,这种语法非常有效:
mod image;
use image::Image;
Run Code Online (Sandbox Code Playgroud) 我正在尝试从位于单独文件中的模块调用函数,该函数是公共的,我使用完整路径调用它,但是rustc仍然抱怨"未解析的名称".
pub mod b;
fn main() {
b::f()
}
Run Code Online (Sandbox Code Playgroud)
pub mod b {
pub fn f(){
println!("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
$ rustc a.rs
a.rs:3:5: 3:9 error: unresolved name `b::f`.
Run Code Online (Sandbox Code Playgroud)
当我将模块移动到包的主文件时,一切正常.
pub mod b {
pub fn f(){
println!("Hello World!");
}
}
fn main() {
b::f()
}
Run Code Online (Sandbox Code Playgroud)
这两种方式不应该是等价的吗?我做错了什么,或者是生锈的错误?
我不明白mod
或者use
;我想这mod
会将文件导入到项目中并use
使用它们。
我有一个具有以下层次结构的项目:
.
|-- Cargo.lock
|-- Cargo.toml
|-- src
| |-- display.rs
| |-- list.rs
| |-- main.rs
| |-- parser.rs
| |-- sort.rs
Run Code Online (Sandbox Code Playgroud)
为什么我需要use
in list.rs而不是main.rs?我在list.rs中使用函数sorting()
and就像在main.rs中使用函数and一样。print_files()
parse()
listing()
主程序.rs
mod parser; // Ok
mod list; // Ok
mod sort; // Ok
mod display; // Ok
// use parser;// The name `parser` is defined multiple times
fn main() {
parser::parse();
list::listing(); …
Run Code Online (Sandbox Code Playgroud) Rust 无法通过声明找到本地文件。我在 src 中有以下文件结构:
| main.rs
| lib.rs
| test.rs
| prog.rs
| file.rs
Run Code Online (Sandbox Code Playgroud)
在 main.rs 我有
extern crate cratename;
mod prog;
use cratename::file1::File1;
...
prog::function() // This works
...
#[cfg(test)]
mod test;
Run Code Online (Sandbox Code Playgroud)
在 lib.rs 我有
pub mod file1;
Run Code Online (Sandbox Code Playgroud)
在 test.rs 我有
extern crate cratename
use cratename::file1::File1;
mod prog;
#[test]
...
prog::function() // This does not work
...
Run Code Online (Sandbox Code Playgroud)
我不断收到错误
error[E0583]: file not found for module `prog`
Run Code Online (Sandbox Code Playgroud)
我尝试将声明放在 lib.rs 中,但这没有用。我已经尝试了许多其他涉及此声明以及 main.rs 的排列,但都没有奏效。如果有帮助,prog.rs 不包含结构,也不使用 mod 关键字,它只包含公共函数。这让我难住了一段时间。感谢您的帮助。
主要功能如下:
mod stats;
fn main() {
let raw_data = [10, 10, 20, 1, 2, 3, 5];
let mut v: Vec<u32> = Vec::new();
let mean = 0;
let median = 0;
let mode = 0;
for i in raw_data.iter() {
v.push(*i);
}
let stat = stats::stats::Stats::new(v);
}
Run Code Online (Sandbox Code Playgroud)
模块统计信息如下:
pub mod stats {
pub struct Stats {
data: Vec<u32>,
}
impl Stats {
pub fn new(data: Vec<u32>) -> Stats {
Stats { data }
}
pub fn find_mean(&self) -> f64 {
let …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Rust中配置一个示例项目.
我的结构是:
src/potter.rs
tests/tests.rs
和我的 Cargo.toml
[package]
name = "potter"
version = "0.1.0"
authors = ["my name"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
我的potter.rs
包含:
pub mod potter {
pub struct Potter {
}
impl Potter {
pub fn new() -> Potter {
return Potter {};
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的tests.rs
包含:
use potter::Potter;
#[test]
fn it_works() {
let pot = potter::Potter::new();
assert_eq!(2 + 2, 4);
}
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
error[E0432]: unresolved import `potter`
--> tests/tests.rs:1:5
|
1 | use potter::Potter;
| ^^^^^^ Maybe a missing …
Run Code Online (Sandbox Code Playgroud)