字符串

Rust has two types to represent strings, both of which will be covered in more depth later. Both always store UTF-8 encoded strings.

  • 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 不是以字符边界结尾,因此会导致程序 panic。根据错误消息,将其调整至以字符边界结尾的范围。

  • 原始字符串可在创建 &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.