在正式學(xué)習(xí) Rust 語言以前,我們需要先學(xué)會怎樣輸出一段文字到命令行,這幾乎是學(xué)習(xí)每一門語言之前必備的技能,因?yàn)檩敵龅矫钚袔缀跏钦Z言學(xué)習(xí)階段程序表達(dá)結(jié)果的唯一方式。
在之前的 Hello, World 程序中大概已經(jīng)告訴了大家輸出字符串的方式,但并不全面,大家可能很疑惑為什么 println!( "Hello World") 中的 println 后面還有一個(gè) ! 符號,難道 Rust 函數(shù)之后都要加一個(gè)感嘆號?顯然并不是這樣。println 不是一個(gè)函數(shù),而是一個(gè)宏規(guī)則。這里不需要更深刻的挖掘宏規(guī)則是什么,后面的章節(jié)中會專門介紹,并不影響接下來的一段學(xué)習(xí)。
Rust 輸出文字的方式主要有兩種:println!() 和 print!()。這兩個(gè)"函數(shù)"都是向命令行輸出字符串的方法,區(qū)別僅在于前者會在輸出的最后附加輸出一個(gè)換行符。當(dāng)用這兩個(gè)"函數(shù)"輸出信息的時(shí)候,第一個(gè)參數(shù)是格式字符串,后面是一串可變參數(shù),對應(yīng)著格式字符串中的"占位符",這一點(diǎn)與 C 語言中的 printf 函數(shù)很相似。但是,Rust 中格式字符串中的占位符不是"% + 字母"的形式,而是一對 {}。
fn main() { let a = 12; println!("a is {}", a); }
以上程序的輸出結(jié)果是:
a is 12
如果我想把 a 輸出兩遍,那豈不是要寫成:
println!("a is {}, a again is {}", a, a);
其實(shí)有更好的寫法:
println!("a is {0}, a again is {0}", a);
在 {} 之間可以放一個(gè)數(shù)字,它將把之后的可變參數(shù)當(dāng)作一個(gè)數(shù)組來訪問,下標(biāo)從 0 開始。
如果要輸出 { 或 } 怎么辦呢?格式字符串中通過 {{ 和 }} 分別轉(zhuǎn)義代表 { 和 }。但是其他常用轉(zhuǎn)義字符與 C 語言里的轉(zhuǎn)義字符一樣,都是反斜杠開頭的形式。
fn main() { println!("{{}}"); }
以上程序的輸出結(jié)果是:
{}