Подтвердить что ты не робот

Как сопоставить строку с строковыми литералами в Rust?

Я пытаюсь понять, как совместить String в Rust.

Сначала я попытался сопоставить это, но я понял, что Rust не может неявно отбрасывать от std::string::String до &str.

fn main() {
    let stringthing = String::from("c");
    match stringthing {
        "a" => println!("0"),
        "b" => println!("1"),
        "c" => println!("2"),
    }
}

Затем я попытался построить новые объекты String, так как я не смог найти функцию для приведения a String к &str.

fn main() {
    let stringthing = String::from("c");
    match stringthing {
        String::from("a") => println!("0"),
        String::from("b") => println!("1"),
        String::from("c") => println!("2"),
    }
}

Это дало мне следующую ошибку 3 раза:

error[E0164]: `String::from` does not name a tuple variant or a tuple struct
 --> src/main.rs:4:9
  |
4 |         String::from("a") => return 0,
  |         ^^^^^^^^^^^^^^^^^ not a tuple variant or struct

Как на самом деле сопоставить String в Rust?

4b9b3361

Ответ 1

as_slice устарел, теперь вы должны использовать признак std::convert::AsRef:

match stringthing.as_ref() {
    "a" => println!("0"),
    "b" => println!("1"),
    "c" => println!("2"),
    _ => println!("something else!"),
}

Обратите внимание, что вы также должны явно обрабатывать весь файл catch.

Ответ 2

Этот ответ относится к более ранней версии Rust и больше не точен.

Вы можете совместить на фрагменте строки.

match stringthing.as_slice() {
    "a" => println!("0"),
    "b" => println!("1"),
    "c" => println!("2"),
    _ => println!("something else!"),
}

Ответ 3

Вы можете сделать что-то вроде этого:

match &stringthing[..] {
    "a" => println!("0"),
    "b" => println!("1"),
    "c" => println!("2"),
    _ => println!("something else!"),
}

Также существует метод as_str с Rust 1.7.0.

Ответ 4

Вы также можете сделать

match &stringthing as &str {
    "a" => println!("0"),
    "b" => println!("1"),
    "c" => println!("2"),
    _ => println!("something else!"),
}

См: