字符串与Rust中的选项匹配

字符串与Rust中的选项匹配,rust,Rust,我尝试将输入与可能的类型匹配,然后将该字符串值转换为数字。我有这样的想法: fn letter_to_num(nameNum: &str) -> Option<f32> { match nameNum { Some(num) => { "One" => 1.0, "Two" => 2.0, "Three&qu

我尝试将输入与可能的类型匹配,然后将该字符串值转换为数字。我有这样的想法:

fn letter_to_num(nameNum: &str) -> Option<f32> {
    match nameNum {
        Some(num) => {
            "One" => 1.0,
            "Two" => 2.0,
            "Three" => 3.0
        },
        None => println!("Invalid Number"),
    }
}

首先,您在&str上进行匹配,而不是选项,所以您的代码应该更像这样

fn letter_to_num(nameNum: &str) -> Option<f32> {
    match nameNum {
        "One" => Some(1.0),
        "Two" => Some(2.0),
        "Three" => Some(3.0),
        _ => None // or panic!("message")
    }
}
这里的要点是:

您需要匹配on&str值和返回选项,而不是匹配on选项

您需要从函数Some或None或panic返回正确的值。普林顿!既不恐慌也不返回正确的类型值。由于好奇恐慌从技术上讲永远不会返回调用方,所以它们会中断程序的执行

当匹配时,您需要指定一组穷尽的匹配,像u这样的通配符就可以了。它基本上说-匹配这里的所有内容。所以你把它放在最后。你可以在这里使用一个变量,比如a,比如a=>panic!无效值{},为

只是一些一般性的评论:

当比较输入考虑大写字母和小写字母时,你可以通过将输入转换为小写,然后进行匹配来实现这一点,当然,除非你只考虑大写单词作为正确的单词。
首先,您在&str上进行匹配,而不是选项,所以您的代码应该更像这样

fn letter_to_num(nameNum: &str) -> Option<f32> {
    match nameNum {
        "One" => Some(1.0),
        "Two" => Some(2.0),
        "Three" => Some(3.0),
        _ => None // or panic!("message")
    }
}
这里的要点是:

您需要匹配on&str值和返回选项,而不是匹配on选项

您需要从函数Some或None或panic返回正确的值。普林顿!既不恐慌也不返回正确的类型值。由于好奇恐慌从技术上讲永远不会返回调用方,所以它们会中断程序的执行

当匹配时,您需要指定一组穷尽的匹配,像u这样的通配符就可以了。它基本上说-匹配这里的所有内容。所以你把它放在最后。你可以在这里使用一个变量,比如a,比如a=>panic!无效值{},为

只是一些一般性的评论:

当比较输入考虑大写字母和小写字母时,你可以通过将输入转换为小写,然后进行匹配来实现这一点,当然,除非你只考虑大写单词作为正确的单词。 输入是&str,而不是选项,因此Somenum与nameNum的模式不匹配。它还应该重命名为name_num,否则您将收到警告。 由于要返回不匹配字符串的错误消息,可以使用Result

在上测试上述代码。

输入是&str,而不是Option,因此Somenum与nameNum的模式不匹配。它还应该重命名为name_num,否则您将收到警告。 由于要返回不匹配字符串的错误消息,可以使用Result

在上测试上述代码