Stringstr

現在,我們可以瞭解 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 編碼的位元組,且絕不會進行小字串最佳化。