File hierarchy

Modules can be mapped to a file/directory hierarchy. Let's break down the visibility example in files:

$ tree .

.

|-- my

|   |-- inaccessible.rs

|   |-- mod.rs

|   `-- nested.rs

`-- split.rs

In split.rs:

// This declaration will look for a file named `my.rs` or `my/mod.rs` and will

// insert its contents inside a module named `my` under this scope

mod my;


fn function() {

println!("called `function()`");

}


fn main() {

my::function();


function();


my::indirect_access();


my::nested::function();

}


In my/mod.rs:

// Similarly `mod inaccessible` and `mod nested` will locate the `nested.rs`

// and `inaccessible.rs` files and insert them here under their respective

// modules

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();

}

In my/nested.rs:

pub fn function() {

println!("called `my::nested::function()`");

}


#[allow(dead_code)]

fn private_function() {

println!("called `my::nested::private_function()`");

}

In my/inaccessible.rs:

#[allow(dead_code)]

pub fn public_function() {

println!("called `my::inaccessible::public_function()`");

}

Let's check that things still work as before:

$ rustc split.rs && ./split

called `my::function()`

called `function()`

called `my::indirect_access()`, that

> called `my::private_function()`

called `my::nested::function()`

Загрузка...