Phân cấp tập tin
Các module có thể được ánh xạ vào một cấu trúc tập tin/thư mục. Hãy phân tích ví dụ visibility trong các tập tin:
$ tree .
.
├── my
│ ├── inaccessible.rs
│ └── nested.rs
├── my.rs
└── split.rs
Trong tập tin split.rs
:
// Khai báo này sẽ tìm tập tin tên là `my.rs` và sẽ
// chèn nội dung của nó vào trong một module tên `my` trong phạm vi này (scope).
mod my;
fn function() {
println!("called `function()`");
}
fn main() {
my::function();
function();
my::indirect_access();
my::nested::function();
}
Trong tập tin my.rs
:
// Tương tự `mod inaccessible` và `mod nested` sẽ tìm các tập tin `nested.rs`
// và `inaccessible.rs` và chèn chúng vào đây dưới các module tương ứng.
mod inaccessible;
pub mod nested;
pub fn function() {
println!("called `my::function()`");
}
fn private_function() {
println!("called `my::private_function()`");
}
pub fn indirect_access() {
print!("called `my::indirect_access()`, that\n> ");
private_function();
}
Trong tập tin my/nested.rs
:
pub fn function() {
println!("called `my::nested::function()`");
}
#[allow(dead_code)]
fn private_function() {
println!("called `my::nested::private_function()`");
}
Trong tập tin my/inaccessible.rs
:
#[allow(dead_code)]
pub fn public_function() {
println!("called `my::inaccessible::public_function()`");
}
Kiểm tra xem mọi thứ vẫn hoạt động như trước:
$ rustc split.rs && ./split
called `my::function()`
called `function()`
called `my::indirect_access()`, that
> called `my::private_function()`
called `my::nested::function()`