我正在尝试将输入与可能的类型进行匹配,然后将该字符串值转换为数字。我有这样的东西:
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
不匹配您需要从函数返回正确的值(
Some
或None
)或 panic 。println!
既不 panic 也不返回正确的类型值。从技术上讲,由于好奇心 panic 永远不会返回调用者,因此是允许的,因此它们会中断程序的执行。匹配时,您需要指定详尽的匹配集,如
_
之类的通配符会做。它基本上是说——匹配这里的一切。所以你把它放在最后。您可以使用变量,例如a
这里例如像这样a => panic!("Invalid value {}", a)
只是一些一般性评论:
- 在比较输入时考虑大小写,您可以通过以下方式实现这一点:将输入转换为小写,然后进行匹配,当然,除非您只将大写单词视为正确的单词。
关于rust - Rust 中的字符串与选项匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61001291/