如何包含同一项目中另一个文件的模块?

2024-04-19

依照指示本指南 https://doc.rust-lang.org/0.12.0/guide.html#crates-and-modules我创建了一个 Cargo 项目。

src/main.rs

fn main() {
    hello::print_hello();
}

mod hello {
    pub fn print_hello() {
        println!("Hello, world!");
    }
}

我用它运行

cargo build && cargo run

并且编译没有错误。现在我试图将主模块分成两部分,但无法弄清楚如何包含另一个文件中的模块。

我的项目树看起来像这样

├── src
    ├── hello.rs
    └── main.rs

以及文件的内容:

src/main.rs

use hello;

fn main() {
    hello::print_hello();
}

src/hello.rs

mod hello {
    pub fn print_hello() {
        println!("Hello, world!");
    }
}

当我编译它时cargo build I get

error[E0432]: unresolved import `hello`
 --> src/main.rs:1:5
  |
1 | use hello;
  |     ^^^^^ no `hello` external crate

我尝试按照编译器的建议进行修改main.rs to:

#![feature(globs)]

extern crate hello;

use hello::*;

fn main() {
    hello::print_hello();
}

但这仍然没有多大帮助,现在我明白了:

error[E0463]: can't find crate for `hello`
 --> src/main.rs:3:1
  |
3 | extern crate hello;
  | ^^^^^^^^^^^^^^^^^^^ can't find crate

是否有一个简单的示例来说明如何将当前项目中的一个模块包含到项目的主文件中?


你不需要mod hello在你的hello.rs文件。除了 crate 根目录之外的任何文件中的代码 (main.rs对于可执行文件,lib.rs对于库)会自动在模块中命名。

包含来自的代码hello.rs在你的main.rs, use mod hello;。它被扩展到代码中hello.rs(正如你之前所做的那样)。您的文件结构保持不变,并且您的代码需要稍微更改:

main.rs:

mod hello;

fn main() {
    hello::print_hello();
}

hello.rs:

pub fn print_hello() {
    println!("Hello, world!");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何包含同一项目中另一个文件的模块? 的相关文章

  • 如何读取与 Rust 中的自定义类型关联的枚举值?

    我在 Rust 中有一个实现 如下所示 在主函数中 我正在读取一个值SalaryRange枚举 这将显示High So High This can be a complex type just using string for the qu
  • 如何从向量或数组中随机选择一个元素?

    我有一个向量 其中元素是 String String 我如何随机选择这些元素之一 你想要的rand https crates io crates rand 板条箱 特别是choose https docs rs rand 0 7 2 ran
  • Rust 中带有纯宏的函数组合链

    我读了 如何在 Rust 中编写函数 https stackoverflow com questions 45786955 how to compose functions in rust Rust 中的函数组合链 https stacko
  • 将非 Rust 存储库声明为 Rust 项目中的依赖项的最佳方法是什么?

    我有一个 Rust 项目 我想使用另一个非 Rust 存储库中存在的 protobuf 定义 我打算下载 protobuf 存储库 创建一个src common protobuf我的主存储库中的模块 使用cargo build将每个 pro
  • 并行处理 vec:如何安全地进行,或者不使用不稳定的功能?

    我有一个巨大的向量 我希望能够并行加载 操作 例如在一个线程中加载前十万个索引 然后在另一个线程中加载下一个索引 依此类推 由于这将是代码中非常热门的部分 因此我提出了以下概念验证不安全代码来在不使用 Arcs 和互斥体的情况下执行此操作
  • 参数类型可能寿命不够长?

    以下代码段给我一个错误 use std rc Rc Definition of Cat Dog and Animal see the last code block type RcAnimal Rc
  • 为什么 _ destroy 在语句末尾?

    我看到了其他一些问题answers https stackoverflow com a 25877389 221955说明let foo 在语句末尾而不是在作用域退出时销毁结果 这就是let a foo does 我找不到任何官方描述 也找
  • 如何将 HashMap 作为 JSON 类型插入到 PostgreSQL 中?

    contacts数据结构为HashMap 我在用着PostgreSQL客户 Rust Postgres https github com sfackler rust postgres插入contact的键和值放入一个表中 然后我想从表中进行
  • 如何使用 Warp 检查授权标头?

    我正在使用 Rust 和 Warp 构建 graphql api 我已经浏览了文档 但我仍然不知道如何链接过滤器 特别是检查authorization在请求头中 let context extractor warp any this cod
  • 使用推断的 (?) 类型克隆 std::iter::Map

    我在以紧凑的方式克隆地图时遇到问题 extern crate itertools num use itertools num linspace fn main 440Hz as wave frequency middle A let fre
  • “流不包含有效的 UTF-8”是什么意思?

    我正在创建一个简单的 HTTP 服务器 我需要读取请求的图像并将其发送到浏览器 我正在使用这段代码 fn read file mut file name String gt String file name file name replac
  • 如何让 Cargo 显示哪些文件导致重建?

    我在用cargo maturin and pytest构建混合 Python Rust 项目 在开发过程中 我经常循环使用命令 cargo test p mypkg release maturin develop release pytho
  • Rust 双与号,&&

    我看到一些代码如下所示 fn test lt a gt a mut a str 我知道 a 是一生 而 是引用 但是我很难理解双重引用 根据我的理解 引用是一个指针 那么 是指向另一个指针还是其他指针的指针 根据我的理解 引用是一个指针 是
  • Rust 中的基本树和指针

    我拥有一些 C 语言背景 尝试 学习 Rust 让我对自己的能力产生了质疑 我正在尝试找出如何更改拥有的指针 并且正在努力做到这一点 除了从额外的库中复制之外 我无法弄清楚二叉树上所需的递归 特别是 我不知道如何交换指针分支 虽然使用链表我
  • 类型提示中 _ 的正确术语是什么?

    在 Rust 的类型提示中 可以在注释中使用部分类型 如下所示 let myvec Vec lt gt vec 1 2 3 部分类型注释中下划线的正确术语是什么 我对 Rust 术语以及更多学术类型理论术语感兴趣 我找到了一个一份官方文件
  • 如何使用自定义 llc 编译 Rust 程序?

    我有一个自定义 LLVM 后端 并且想为该自定义 nostd 目标交叉编译 Rust 我想分两步编译 Rust 程序 Using rustc生成 LLVM IR 用我自己的opt and llc将 LLVM IR 转换为机器代码 我尝试使用
  • 无法覆盖 Rustup 工具链以自定义构建 iOS 工具链

    我正在用我的 Rust 版本创建我自己的工具链 我需要它与 iOS 架构进行交叉编译 当尝试设置默认工具链或覆盖当前目录的工具链时 我收到有关工具链名称的错误 以下是我创建这个新工具链所采取的步骤 创建 Rustup 工具链 rustup
  • 如何在 Rust 中使用 cfg 检查发布/调试版本?

    使用 C 预处理器很常见 if defined NDEBUG release build endif if defined DEBUG debug build endif Cargo 的大致等价物是 cargo build release以
  • 无法启动客户端 Rust 语言服务器

    我正在尝试弄清楚如何使用 WSL 中的 rustc 和 Cargo 我使用 VS Code 和 Rust rls 插件 可以编译我的代码 但 RLS 存在问题 无法启动客户端 Rust 语言服务器 Rustup 不可用 安装自https w
  • 何时使用 Box> 或 Vec>?

    什么时候设计一个嵌套的数据结构才有意义 Box and a Vec 或相反亦然 似乎在大多数情况下 您想在堆上存储多个固定大小的东西 Box是多余的 因为它唯一的 作用是堆分配一个 单个值 以及一个正常的Vec已经在堆上分配其存储空间 背景

随机推荐