mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {
println!("add_to_waitlist")
}
fn seat_at_table() {}
}
mod serving {
fn take_order() {}
fn server_order() {}
fn take_payment() {}
}
}
絕對路徑(absolute path)從 crate 根開始齿桃,以 crate 名或者字面值 crate 開頭。
相對路徑(relative path)從當(dāng)前模塊開始煮盼,以 self短纵、super 或當(dāng)前模塊的標(biāo)識符開頭。
pub fn eat_at_restaurant() {
crate::front_of_house::hosting::add_to_waitlist();
front_of_house::hosting::add_to_waitlist();
}
使用 super 開頭來構(gòu)建從父模塊開始的相對路
fn serve_order() {}
mod back_of_house {
fn fix_incorrect_order() {
cook_order();
super::serve_order();
}
fn cook_order() {}
}
創(chuàng)建公有的結(jié)構(gòu)體和枚舉
mod back_of_house1 {
// 帶有公有和私有字段的結(jié)構(gòu)體 , 結(jié)構(gòu)體可以單個(gè)共有
pub struct Breakfast {
pub toast: String,
seasonal_fruit: String,
}
impl Breakfast {
pub fn summer(toast: &str) -> Breakfast {
Breakfast {
toast: String::from(toast),
seasonal_fruit: String::from("peaches"),
}
}
}
}
pub fn eat_at_restaurant1() {
let mut meal = back_of_house1::Breakfast::summer("Tom");
meal.toast = String::from("Wheat");
println!("I'd like {} toast please", meal.toast);
}
如果將枚舉設(shè)為公有孕似,則它的所有成員都將變?yōu)楣?/p>
mod back_of_house2 {
pub enum Appetizer {
Soup,
Salad,
}
}
pub fn eat_at_restaurant3() {
let o1 = back_of_house2::Appetizer::Salad;
let o2 = back_of_house2::Appetizer::Soup;
}
使用 use 關(guān)鍵字將名稱引入作用域(簡化路徑使用)
mod front_of_house4 {
pub mod hosting {
pub fn add_to_waitlist() {}
}
}
use crate::front_of_house4::hosting;
pub fn eat_at_restaurant4() {
hosting::add_to_waitlist()
}
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.insert(1, 2);
println!("map = {:?}", map);
}
最好只引入到父模塊踩娘,防止沖突
use std::fmt;
use std::io;
fn function1() -> fmt::Result {
--snip--
}
fn function2() -> io::Result<()> {
--snip--
}
使用 as 關(guān)鍵字提供新的名稱
use std::fmt::Result;
use std::io::Result as IoResult;
fn fn1() -> Result {}
fn fn2() -> IoResult<()> {}
當(dāng)使用 use 關(guān)鍵字將名稱導(dǎo)入作用域時(shí),在新作用域中可用的名稱是私有的喉祭。如果為了讓調(diào)用你編寫的代碼的代碼能夠像在自己的作用域內(nèi)引用這些類型养渴,可以結(jié)合 pub 和 use。這個(gè)技術(shù)被稱為 “重導(dǎo)出(re-exporting)”泛烙,因?yàn)檫@樣做將項(xiàng)引入作用域并同時(shí)使其可供其他代碼引入自己的作用域理卑。
mod front_of_house5 {
pub mod hosting5 {
pub fn add_to_waitlist() {}
}
}
pub use crate::front_of_house5::hosting5;
pub fn eat_at_restaurant5() {
hosting::add_to_waitlist();
hosting::add_to_waitlist();
hosting::add_to_waitlist();
}
使用外部包
[dependencies]
rand = "0.5.5"
use rand::Rng;
fn main() {
let secret_number = rand::thread_rng().gen_range(1, 101);
}
嵌套路徑來消除大量的 use 行
use std::cmp::Ordering;
use std::io;
use std::{cmp::Ordering, io};
通過 glob 運(yùn)算符將所有的公有定義引入作用域
use std::collections::*;