面试题答案
一键面试模块组织方式
- 在项目根目录下的
src
目录中,一般会有一个main.rs
文件作为项目入口。如果项目规模较大,还可以使用lib.rs
文件来定义库模块。假设这是一个库项目,在src/lib.rs
中定义模块结构:
// src/lib.rs
pub mod core {
pub mod submodule1;
pub mod submodule2;
}
- 在
src/core
目录下分别创建submodule1.rs
和submodule2.rs
文件:
mkdir src/core
touch src/core/submodule1.rs
touch src/core/submodule2.rs
可见性修饰符及 import
语句
submodule1
调用submodule2
函数:- 在
submodule2.rs
中,将需要被submodule1
调用的函数设置为pub
(公开)。例如:
- 在
// src/core/submodule2.rs
pub fn submodule2_function() {
println!("This is submodule2_function");
}
- 在
submodule1.rs
中,通过use
语句引入submodule2
中的函数:
// src/core/submodule1.rs
use crate::core::submodule2::submodule2_function;
pub fn submodule1_function() {
submodule2_function();
println!("This is submodule1_function");
}
main
模块调用core
模块公开函数:- 在
core
模块的某个子模块(例如submodule1
)中,将需要被main
模块调用的函数设置为pub
。假设在submodule1.rs
中已经有pub fn submodule1_function()
。 - 在
main.rs
中引入core
模块及其公开函数:
- 在
// src/main.rs
use crate::core::submodule1::submodule1_function;
fn main() {
submodule1_function();
}
错误及解决办法
如果在 submodule1
中尝试调用 submodule2
中未正确设置可见性的函数,会出现编译错误,类似于:
error[E0603]: function `non_public_function` is private
--> src/core/submodule1.rs:X:Y
|
X | non_public_function();
| ^^^^^^^^^^^^^^^^^^^^^ private function
解决办法就是将 submodule2
中需要被 submodule1
调用的函数设置为 pub
公开函数,如上述 submodule2.rs
中的示例。