String
和 str
現在,我們可以瞭解 Rust 中有兩種字串型別:
fn main() { let s1: &str = "World"; println!("s1: {s1}"); let mut s2: String = String::from("Hello "); println!("s2: {s2}"); s2.push_str(s1); println!("s2: {s2}"); let s3: &str = &s2[6..]; println!("s3: {s3}"); }
以 Rust 術語來說會是這樣:
&str
是對字串切片的不可變參照。String
是可變動的字串緩衝區。
-
&str
可引進字串切片,這是對 UTF-8 編碼字串的不可變參照;該編碼字串儲存在記憶體區塊中,字串常值 (”Hello”
) 則儲存在程式的二進位檔中。 -
Rust 的
String
型別是位元組向量的包裝函式。就像使用Vec<T>
一樣,該型別有專屬的擁有者。 -
就像使用其他許多型別一樣,
String::from()
會透過字串常值建立字串;String::new()
則建立新的空白字串,您可以使用push()
和push_str()
方法將字串資料加到該字串。 -
如要從動態值產生自有字串,使用
format!()
巨集是便捷的方法。該巨集接受與println!()
相同的格式規格。 -
您可以透過
&str
和可選的範圍選項,從String
借用&str
切片。 -
C++ 程式設計師請注意:您可以將
&str
想成 C++ 的const char*
,但這個&str
將一律指向記憶體中的有效字串。Rust 的String
大致等同於 C++ 的std::string
,主要差別是前者只能包含 UTF-8 編碼的位元組,且絕不會進行小字串最佳化。