相关疑难解决方法(0)

将模块拆分为多个文件

我希望有一个包含多个结构的模块,每个模块都在自己的文件中.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的模块系统(开始时有点混乱)并没有提供一种明显的方法来实现这一点.它似乎只允许您将整个模块放在一个文件中.这不是质朴的吗?如果没有,我该怎么做?

module rust

87
推荐指数
6
解决办法
3万
查看次数

如何在Rust 2015中从一个模块到另一个模块执行基本导入/包含功能?

我找不到如何将函数从一个文件(模块)包含(或导入,注入或其他一些单词)到另一个文件.

我开始一个新项目

$ cd ~/projects
$ cargo new proj --bin
$ cd proj
$ tree
.
|
-- Cargo.toml
-- src
   |
   -- main.rs
Run Code Online (Sandbox Code Playgroud)

我使用以下代码修改main.rs并创建一个新文件a.rs(在srcdir中):

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 …

module rust

41
推荐指数
3
解决办法
2万
查看次数

如何"使用"或导入本地Rust文件?

如何在完整路径my_project/src/include_me.rs中包含文件main.rs

我已经检查了依赖指南,所有这些指南似乎都包含了二进制文件.我也检查了"The Book",但其中没有一个例子以".rs"结尾.

如何include_me.rs使用项目的其余部分进行编译?

编辑:虽然"可能重复"将是一个包含这个问题的答案的好地方,但它并不包含它.这个问题的最佳答案中的语法更加相关,并在"重复"的问题中掩盖了

import rust

15
推荐指数
1
解决办法
9215
查看次数

使用 mod 关键字访问 Rust 中的子目录

我有文件结构: 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 语句大约半个小时,但无法让它工作。

rust

8
推荐指数
0
解决办法
4367
查看次数

为什么我不能从同一目录中的不同文件导入模块?

我的目录结构:

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)

module rust

6
推荐指数
2
解决办法
1698
查看次数

为什么生锈无法在子模块中找到功能?

我正在尝试从位于单独文件中的模块调用函数,该函数是公共的,我使用完整路径调用它,但是rustc仍然抱怨"未解析的名称".

a.rs

pub mod b;
fn main() {
  b::f()
}
Run Code Online (Sandbox Code Playgroud)

b.rs

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)

当我将模块移动到包的主文件时,一切正常.

one_file.rs

pub mod b {
    pub fn f(){
        println!("Hello World!");
    }
}
fn main() {
    b::f()
}
Run Code Online (Sandbox Code Playgroud)

这两种方式不应该是等价的吗?我做错了什么,或者是生锈的错误?

module rust

5
推荐指数
1
解决办法
3917
查看次数

为什么我在子模块中需要“use”语句,但在 main.rs 中不需要?

我不明白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)

为什么我需要usein 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

5
推荐指数
1
解决办法
3589
查看次数

同一目录中文件的模块错误未找到 Rust 文件

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 关键字,它只包含公共函数。这让我难住了一段时间。感谢您的帮助。

import module rust

5
推荐指数
0
解决办法
5481
查看次数

需要使用模块名称两次才能引用模块中的结构

主要功能如下:

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

4
推荐指数
1
解决办法
752
查看次数

无法在集成测试中导入模块

我正在尝试在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)

rust

3
推荐指数
1
解决办法
1988
查看次数

标签 统计

rust ×10

module ×5

import ×2