- 如果不使用下划线作为匹配项,“None”会全部捕获吗,可以用它来代替下划线吗?
在这种情况下,是的。 Option<T> 只有 2 种情况:Some<T> 或 None。
您已经为所有值匹配 Some 案例,None 是唯一剩下的案例,所以
None 的行为与 _ 完全相同。
2. 这样的函数是否可以在不使用结构体作为返回值的情况下返回错误?
我建议您阅读这份详细指南以了解处理错误的所有可能方法 -
http://static.rust-lang.org/doc/master/tutorial-conditions.html
使用选项和结果将要求您返回一个结构。
3. 一般来说,是否有可能使用“匹配”进行不匹配,如果是,会发生什么?
如果 Rust 不能保证所有可能的情况都得到处理,它就不会编译 match。如果您不匹配所有可能性,则需要有一个 _ 子句。
4. 在下面的示例中,使用下划线和使用“无”有什么区别吗?
没有。请参阅答案 #1。
以下是编写函数的多种方式中的 3 种:
// Returns -1 on wrong input.
fn alt_1(s: &str) -> i64 {
match from_str::<i64>(s) {
Some(i) => if i >= 0 {
i
} else {
-1
},
None => -1
}
}
// Returns None on invalid input.
fn alt_2(s: &str) -> Option<i64> {
match from_str::<i64>(s) {
Some(i) => if i >= 0 {
Some(i)
} else {
None
},
None => None
}
}
// Returns a nice message describing the problem with the input, if any.
fn alt_3(s: &str) -> Result<i64, ~str> {
match from_str::<i64>(s) {
Some(i) => if i >= 0 {
Ok(i)
} else {
Err(~"It's less than 0!")
},
None => Err(~"It's not even a valid integer!")
}
}
fn main() {
println!("{:?}", alt_1("123"));
println!("{:?}", alt_1("-123"));
println!("{:?}", alt_1("abc"));
println!("{:?}", alt_2("123"));
println!("{:?}", alt_2("-123"));
println!("{:?}", alt_2("abc"));
println!("{:?}", alt_3("123"));
println!("{:?}", alt_3("-123"));
println!("{:?}", alt_3("abc"));
}
输出:
123i64
-1i64
-1i64
Some(123i64)
None
None
Ok(123i64)
Err(~"It's less than 0!")
Err(~"It's not even a valid integer!")