首页 > 解决方案 > 为什么我需要 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

解决方案


Rust 的模块系统允许您将代码拆分成小的、可重用的模块。mod您使用关键字声明新模块。每个模块都有自己的范围。这意味着如果您想struct从模块中使用(或其他任何东西),您需要使用关键字 ( ) 键入module_name::StructName或将其带入代码的范围。这是因为在两个不同的模块中可能有两个具有相同名称的不同结构。Ex 模块中有一个结构,模块中有一个结构。如果每个模块没有单独的范围,将导入哪个结构?Rust 无法弄清楚我们的意图是什么。它可能会导致错误和其他问题。useuse module_name::StructNameAbACA

要导入模块,您需要使用模块名称双冒号和导入的子模块或结构 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::*,
};

另请阅读:


推荐阅读