9.5 File hierarchy
모듈들은 파일/디렉토리로 이뤄진 계층 구조로 그려질 수 있다. 가시성 예제 파일들을 나눠서 살펴보자.
$ tree .
.
|-- my
| |-- inaccessible.rs
| |-- mod.rs
| `-- nested.rs
`-- split.rs
// split.rs
// 이 선언은 `my.rs` 또는 `my /mod.rs` 파일을 찾고
// 해당 내용을 범위 밑의 `my` 모듈에 삽입합니다.
mod my;
fn function() {
println!("called `function()`");
}
fn main() {
my::function();
function();
my::indirect_access();
my::nested::function();
}
// my/mod.rs
// 비슷하게 `mod inaccessible`와 `mod nested`는 `nested.rs`와
// `inaccessible.rs` 파일을 찾아서 각각의 모듈 아래에 삽입한다.
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();
}
// my/nested.rs
pub fn function() {
println!("called `my::nested::function()`");
}
#[allow(dead_code)]
fn private_function() {
println!("called `my::nested::private_function()`");
}
// my/inaccessible.rs
#[allow(dead_code)]
pub fn public_function() {
println!("called `my::inaccessible::public_function()`");
}
전과 같이 계속 동작하는지 확인해 봅시다:
$ rustc split.rs && ./split
called `my::function()`
called `function()`
called `my::indirect_access()`, that
> called `my::private_function()`
called `my::nested::function()`