通过例子学习Rust

12.1 可见性

默认情况下,模块内条目的可见性是私有的,但是可以使用pub将其设置成公开。只有公开的条目才允许在模块外部访问。

fn function() { println!("called `function()`"); } mod my { // A public function pub fn function() { println!("called `my::function()`"); } // A private function fn private_function() { println!("called `my::private_function()`"); } // Items can access other items in the same module pub fn indirect_access() { print!("called `my::indirect_access()`, that\n> "); // regardless of their visibility private_function(); } // A public module pub mod nested { pub fn function() { println!("called `my::nested::function()`"); } #[allow(dead_code)] fn private_function() { println!("called `my::nested::private_function()`"); } } // A private module mod inaccessible { #[allow(dead_code)] pub fn public_function() { println!("called `my::inaccessible::public_function()`"); } } } fn main() { // The public items of a module can be accessed my::function(); // modules allow disambiguation between items that have the same name function(); // The private items of a module can't be directly accessed // Error! `private_function` is private //my::private_function(); // TODO ^ Try uncommenting this line my::indirect_access(); // Public items inside public nested modules can be accessed from outside // the parent module my::nested::function(); // but private items inside public nested modules can't be accessed // Error! `private_function` is private //my::nested::private_function(); // TODO ^ Try uncommenting this line // Items inside private nested modules can't be accessed, regardless of // their visibility // Error! `inaccessible` is a private module //my::inaccessible::public_function(); // TODO ^ Try uncommenting this line }