Rust 生锈:与字符串类型的匹配如何工作?

Rust 生锈:与字符串类型的匹配如何工作?,rust,Rust,我试图使用匹配和来自命令行的用户输入来为程序创建一个简单的界面 以下是相关代码: let NEW_BLOCK: String = String::from("NEW_BLOCK"); let ADD_BLOCK: String = String::from("ADD_BLOCK"); let PRINT_CHAIN: String = String::from("PRINT_CHAIN"); let PUBLISH: String = String::from("PUBLISH"); let

我试图使用
匹配
和来自命令行的用户输入来为程序创建一个简单的界面

以下是相关代码:

let NEW_BLOCK: String = String::from("NEW_BLOCK");
let ADD_BLOCK: String = String::from("ADD_BLOCK");
let PRINT_CHAIN: String = String::from("PRINT_CHAIN");
let PUBLISH: String = String::from("PUBLISH");

let input = String::from("some input");

match input {
    NEW_BLOCK => {
        println!("inside NEW_BLOCK");
    },
    ADD_BLOCK => {
        println!("inside ADD_BLOCK");
    },
    PRINT_CHAIN => {
        println!("inside PRINT_CHAIN");
    },
    PUBLISH => {
        println!("inside PUBLISH");
    },
    _ => {
        println!("Inside else");
    },
}

这会产生一些警告,例如:

warning: unreachable pattern
  --> src/main.rs:13:9
   |
10 |         NEW_BLOCK => {
   |         --------- matches any value
...
13 |         ADD_BLOCK => {
   |         ^^^^^^^^^ unreachable pattern
   |
   = note: `#[warn(unreachable_patterns)]` on by default
无论
input
的值是多少,我总是进入
NEW\u块
arm。通常,我总是进入
match
操作符的第一个臂。我不知道为什么

我最好的猜测是,
match
使用的比较只是比较类型。但我认为这不是一个很好的猜测

有人知道为什么会这样吗?提前感谢您的帮助:)


(顺便说一句,找到了一种使用字符串切片的解决方法。不过,我想知道为什么使用字符串不起作用)。

我认为这与命名变量匹配任何值和认为无可辩驳的模式有关。您需要加入可反驳的模式以使其正确工作

首先,有一些语法和逻辑问题。一旦修复,您将收到如下警告:

“匹配任何值”


这就是为什么你不应该忽视警告的原因。还有相关的经验教训!谢谢@mcarton