rust - 为什么我需要 mod 关键字来访问 Rust 相同级别的文件中的结构?
问题描述
mod pair;
mod point;
mod rectangle;
use pair::Pair;
use point::Point;
use rectangle::Rectangle;
这些结构不应该在与pair.rs、point.rs和rectangle.rs相同级别的代码文件的相同范围内可用吗?
有没有类似python的语法?
from A import B
解决方案
Rust 的模块系统允许您将代码拆分成小的、可重用的模块。mod
您使用关键字声明新模块。每个模块都有自己的范围。这意味着如果您想struct
从模块中使用(或其他任何东西),您需要使用关键字 ( ) 键入module_name::StructName
或将其带入代码的范围。这是因为在两个不同的模块中可能有两个具有相同名称的不同结构。Ex 模块中有一个结构,模块中有一个结构。如果每个模块没有单独的范围,将导入哪个结构?Rust 无法弄清楚我们的意图是什么。它可能会导致错误和其他问题。use
use module_name::StructName
A
b
A
C
A
要导入模块,您需要使用模块名称双冒号和导入的子模块或结构 ex 的名称
use std::io;
要导入一个模块的所有子模块,您需要使用模块名称双冒号和星号,例如
use std::*;
您还可以使用super
关键字引用父模块并一次导入其所有模块,例如:
mod pair;
mod point;
mod rectangle;
use super::*;
从Rust 1.25 开始,您可以嵌套导入组,例如:
use std::{
cmp::{self, Ordering},
fs,
io::prelude::*,
};
另请阅读:
推荐阅读
- python - 使用 yield from 进行递归
- javascript - 如果手动单击 URL 并打开一个新选项卡,那么打开的选项卡是否可以获取对单击 URL 的窗口的引用?
- reactjs - React,动态添加文本到 ref span
- knockout.js - 如何使用 OJET 输入文本 v5.2.0 实现 textInput 绑定?
- php - 将 JSON 嵌套到“数据”中
- c# - 如何将图像 URL 转换为 StorageFile?
- c++ - 为迭代器和无符号整数重载 + 运算符
- php - 我使用哪个用户名/密码连接到 mySQL
- python - 使用 scipy.odr 和 math.erf() 的问题
- xamarin - 在发布版本中获取 MTOUCH:错误 MT5213:重复符号