当一个函数期待一个Option参数时:
fn some_func(arg: Option<&str>) {
// some code
}
可以这样调用:
some_func(Some("ratatouile"));
some_func(None);
如果你希望更简洁地使用函数,去除掉 Some:
fn some_func<'a, T: Into<Option<&'a str>>>(arg: T) {
/// some code
}
这样,你就可以像下面这样调用:
some_func(Some("ratatouile"));
some_func("ratatouile");
some_func(None);
增加一些步骤,可以达到更加轻松的目的,在这之前,你只能这样做:
fn some_func(arg: Option<&str>) {
if let Some(a) = arg {
println!(" {} ", a);
} else {
println!("nothing...");
}
}
现在,在使用arg之前,需要追加一个 .into
fn some_func<'a, T: Into<Option<&'a str>>>(arg: T) {
let arg = arg.into();
if let Some(a) = arg {
println!("{}", a);
} else {
println!("nothing...");
}
}