- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将一个 Rust 程序拆分成多个文件,但是 mod
的使用不允许我从 main.rs 以外的文件引用同一目录中的文件
。
例如,如果我在同一个文件夹中有main.rs
、game.rs
和matrix.rs
,我可以引用来自 game.rs
或 matrix.rs
的结构/函数在 main.rs
中与 mod 游戏;
或 模矩阵;
。但是,我无法使用 mod matrix
之类的语句从 game.rs
引用 matrix.rs
。
我看过几个资源,它们都只有像树一样的模块结构,彼此不引用。是否可以在 Rust 中相互使用文件中的结构/函数,或者这是否违反规则?如果是这样,为什么 Rust 不允许你这样做?
最佳答案
mod
是模块声明。该指令声明一个模块及其所有内容。恰好这些内容可能位于另一个文件中。所以这个:
mod game;
mod matrix;
大致等同于:
mod game {
// game.rs contents
}
mod matrix {
// matrix.rs contents
}
当然,由于 mod
是一个模块的声明,您不能对同一个模块进行多次声明。也就是说,您可以尝试编写如下内容
mod game {
mod matrix;
...
}
mod matrix;
但是,如您所见,matrix
和 game::matrix
是不同的模块,如果它们是外部的,自然 rustc 需要到它们各自文件的不同路径。
使用
是导入声明。 use
声明从其他模块中提取名称以用于当前模块。您可以在任何可访问该模块的地方使用
任何模块和其中的任何公共(public)项。
因此,为了从 game
中引用 matrix
,您需要使用
它:
// game.rs
use matrix;
当然,为了让它工作,matrix
应该在 crate root 中用 mod
声明。
作为旁注,我个人认为理解 Rust 模块系统的最简单方法是首先忘记模块可以放在不同的文件中。也就是说,假设一个 crate 只能在一个文件中定义。在 Rust 中,mod
指令可以有主体并且可以嵌套,所以嵌套的 mod
实际上定义了一个 crate 的模块系统:
mod foo {
mod bax {
...
}
mod baz {
...
}
}
mod bar {
mod qux {
mod zux {
...
}
}
}
如果你只有一个文件,你可以很容易地看到 mod
和 use
指令是如何工作的,模块之间的关系应该变得清晰。
现在你只需要添加一个事实,如果一个模块没有主体声明,比如 mod name;
,它的内容是从 name.rs 加载的
或 name/mod.rs
,任何可用的。然而,全貌丝毫没有改变——这些仍然是嵌套模块,总是可以表示为带有嵌套 mod
指令的单个源文件。事实上,cargo rustc -Z unstable-options --pretty=normal
将在外部源文件中的所有模块组装成一个文件后以这种形式打印你的箱子。我建议在一些具有复杂模块结构的箱子上运行这个命令,看看它在实践中的样子。
关于rust - 我可以在 Rust 中包含模块 "sideways"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35331289/
实际上,我正在编写一个小型太空射击游戏(2.5D,俯 View )。玩家可以沿着 XZ 轴移动并通过右侧的迷你摇杆(游戏 handle )旋转宇宙飞船或查看光标位置(键盘 + 鼠标)。 因此,运动和旋
在图书页面上,用户点击目录中的第 1 章。 在第 1 章页面,用户点击下一章转到第 2 章。 用户可以点击下一章任意次数来浏览章节。 在任何章节页面,如果用户点击后退 按钮,用户应该返回到图书页面,而
我在 CSS 旋转和定位方面遇到了一些问题。 我想将网页的标题横向放置(旋转 -90°,因此它从左到右 -> 从下到上阅读)并贴在网页的右下角。 这是我目前使用的 CSS: .gallerytitle
这个问题在这里已经有了答案: Relative imports in Python 3 (30 个答案) 关闭 7 年前。 我的文件结构如下 math/ snippets/
以下代码抛出 std::bad_cast struct Foo { void foo () {} }; struct Bar { Bar () { dynamic_ca
我有以下情况,有一个 div,我正在向其中动态添加内容。到目前为止,如果添加的内容太多,它会溢出到 div 之外或拉长 div。这两种情况都是我所不希望的。 我想要做的是在单独的列中溢出侧面的内容。我
我正在使用 Bootstrap 的模式来进行一系列评论。因此,我将一堆模态放入列表中,并在用户查看当前模态后显示下一个模态。 问题:如何更改模态,使当前模态向左滑出,新模态从右侧滑入? 我希望这是一个
我试图在多个方向上创建多个横向背景颜色,例如 here . 我尝试使用 background: -webkit-linear-gradient(top left, white,white 80%,#0
我在组件中嵌套了点击事件处理程序: class ListItem extends React.Component { ... render() { return (
我想将一个 Rust 程序拆分成多个文件,但是 mod 的使用不允许我从 main.rs 以外的文件引用同一目录中的文件。 例如,如果我在同一个文件夹中有main.rs、game.rs和matrix.
我对 C++ 没有那么多经验,但正在努力学习。 以下示例由“相关”类的层次结构组成: Child 是 Parent1 和 Parent2 的 child Parent2 是 VirtualGrandP
我有一个 TD/DIV,里面有一些文字。我使文本显示在 TD/DIV 的中心。但我希望文本使用 writing-mode: sideways-lr 居中.我怎样才能做到这一点? div { wid
我在 OpenGL 中编写了一个 3D 环境,您可以在其中向前/向后移动并环顾四周(上/下左/右),但是我无法弄清楚如何向左或向右侧移。 我正在使用 gluLookAt,我的前进代码是 GLfloat
我想在屏幕上移动一个 div。 div 最初设置为 width:100%。但是当转换开始时,div 的大小似乎缩小了(蓝色边框刚好环绕在文本周围)。为什么会这样? 之前 之后 这是我的代码示例 htt
我真的花了几个小时试图解决这个问题,谷歌搜索解决方案,但我做不到。 我有一辆车,它是一辆手推车,所以没有悬架(技术上有,但值接近 0,以模拟轮胎)。车辆有一个刚体,子对象包含 4 个车轮碰撞器(和模型
我一直认为 SQL 中的连接是两个表之间的某种链接。 例如, select e.name, d.name from employees e, departments d where employe
我是一名优秀的程序员,十分优秀!