字串 (String)

Rust 用來代表字串的型別有兩種,稍後會深入介紹。兩者「一律」都儲存 UTF-8 編碼字串。

  • String - a modifiable, owned string.
  • &str - 這是唯讀字串。字串常量會採用此型別。
fn main() {
    let greeting: &str = "Greetings";
    let planet: &str = "🪐";
    let mut sentence = String::new();
    sentence.push_str(greeting);
    sentence.push_str(", ");
    sentence.push_str(planet);
    println!("final sentence: {}", sentence);
    println!("{:?}", &sentence[0..5]);
    //println!("{:?}", &sentence[12..13]);
}
This slide should take about 5 minutes.

這張投影片用於介紹字串。我們稍後會深入介紹此處提及的所有內容,但目前這些就已足夠用於後續的投影片和使用字串的練習題中。

  • 字串中的無效 UTF-8 屬於 UB,而安全的 Rust 環境不允許此行為。

  • String 是使用者定義的型別,具備建構函式 (::new()) 和 s.push_str(..) 等方法。

  • &str 中的 & 表示這是參照。我們稍後會講解何謂參照,因此現在只需將 &str 視為代表「唯讀字串」的單位就行了。

  • 被註解掉的那行程式碼會按照位元組位置建立索引到字串中。12..13 的結尾不是字元邊界,因此程式會發生恐慌。請根據錯誤訊息,將其調整至結尾為字元邊界的範圍。

  • 原形字串可讓您建立停用逸出功能的 &str 值:r"\n" == "\\n"。只要在引號兩側使用等量的 #,即可嵌入雙引號:

    fn main() {
        println!(r#"<a href="link.html">link</a>"#);
        println!("<a href=\"link.html\">link</a>");
    }
  • Using {:?} is a convenient way to print array/vector/struct of values for debugging purposes, and it's commonly used in code.