模块是一个名称空间,包含函数或其类型的定义。 模块是函数,结构,特征,impl
块等项的集合。 默认情况下,模块的修饰符是私有的,但可以使用pub
关键字使用public
修饰符覆盖它。
以下是模块中使用的关键字:
- mod关键字:
mod
关键字声明新模块。 - pub关键字:默认情况下,所有函数,类型,模块和常量都具有私有可见性修饰符。
pub
关键字使可见性修饰符成为公共,因此,它们可在命名空间外部访问。 - use关键字:
use
关键字用于将模块导入本地范围。
模块定义
模块由mod
关键字定义。
模块的语法:
mod module_name
// body inside the module.
模块可以通过三种方式分类:
1.单个模块: 当模块出现在单个文件中时称为单个模块。
通过下面一个例子来理解这一点:
mod a
{
pub fn single_module()
{
println!("Single module");
}
}
fn main()
{
a::single_module();
}
执行上面示例代码,得到以下结果 -
Single module
在上面的示例中,定义了一个模块 - a
,并且块中定义的每个代码都在命名空间a
内。 可以使用模块名称后跟命名空间然后使用函数名称来调用模块a
中的函数。
也可以使用单独的文件来执行上面的示例:
mod module;
fn main()
{
module::single_module();
}
pub fn single_module()
{
println!("Single module");
}
执行上面示例代码,得到以下结果 -
Single module
在上面两个例子中,检查mod X
是用大括号还是在一个名为X.rs
或X/mod.rs
的单独文件中定义的。
2.子模块: 在单个文件中,可以有多个模块。假设库名称是 - language
,它由两个模块组成,即C
和Cplus
。
下面给出了language
库的层次结构:
通过下面一个例子来理解:
mod c
{
pub fn c()
{
println!("C is a structured programming language");
}
}
mod cplus
{
pub fn cplus()
{
println!("C++ is an object-oriented programming language");
}
}
fn main()
{
c::c();
cplus::cplus();
}
执行上面示例代码,得到以下结果:
C is a structured programming language
C++ is an object-oriented programming language
在上面的例子中,程序由两个模块组成,即c
和cplus
,它们各自的函数通过使用c::c()
和cplus::cplus()
来调用。
3.嵌套模块: 嵌套模块是由模块内部的模块组成的模块,当相关模块组合在一起时它们非常有用。
通过下面一个例子来理解这一点:
mod a
{
pub fn a()
{
println!("a module");
}
pub mod b
{
pub fn a()
{
println!("b module");
}
}
}
fn main()
{
a::a();
a::b::b();
}
执行上面示例代码,得到以下结果 -
a module
b module
在上面的例子中,程序由两个模块组成,即a
和b
,其中b
是a
的内部模块。 这两个模块都包含具有相同名称但功能不同。 这两个函数分别使用a::a()
和a::b::b()
来调用。 它们都不会相互冲突,因为它们属于不同的名称空间。