rust - Rust 中的字符串与选项匹配

标签 rust

我正在尝试将输入与可能的类型进行匹配,然后将该字符串值转换为数字。我有这样的东西:

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"),
    }
}

如果无法匹配输入,则会返回错误。否则,它将与其中一项匹配,并在成功时返回 Some(num)。我不完全确定将选项语句放在哪里,并且不同的组合似乎也不想编译。我遇到的主要错误是:

Expected one of '.', ',', ';', or an operator, found '=>'

最佳答案

首先 - 您在 &str 上进行匹配,不是Option ,所以你的代码应该看起来更像这样。

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")
    }
}

这里的要点:

  • 您需要匹配 &str值和返回 Option<f32> ,与 Option 不匹配

  • 您需要从函数返回正确的值( SomeNone )或 panic 。 println!既不 panic 也不返回正确的类型值。从技术上讲,由于好奇心 panic 永远不会返回调用者,因此是允许的,因此它们会中断程序的执行。

  • 匹配时,您需要指定详尽的匹配集,如 _ 之类的通配符会做。它基本上是说——匹配这里的一切。所以你把它放在最后。您可以使用变量,例如a这里例如像这样a => panic!("Invalid value {}", a)

只是一些一般性评论:

  • 在比较输入时考虑大小写,您可以通过以下方式实现这一点:将输入转换为小写,然后进行匹配,当然,除非您只将大写单词视为正确的单词。

关于rust - Rust 中的字符串与选项匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61001291/

相关文章:

rust - 你如何编译一个 Rust 库来定位 asm.js?

rust - 无法运行一个简单的例子 -- "use of unstable library feature ' rustc_private' : . ...."

java - 为什么 Rust 中的对数比 Java 慢?

multithreading - 将闭包(返回具有特征的结构)发送到线程会导致大小错误

rust - 如何装箱具有关联类型的特征?

rust - 将枚举变体用作函数的这种奇怪语法是什么?

syntax - 什么是最直接的链接比较方法,产生第一个不相等的?

rust - 在 Rust 中使用多个 .c 源文件

rust - 如何使用功能标志运行 cargo

c++ - Vulkan 图像布局未在管道屏障中转换