Rust &引用;不能在trait对象上调用'and'u then'方法";将类型批注添加到`和`时出错,然后`
我将一个函数传递给Rust &引用;不能在trait对象上调用'and'u then'方法";将类型批注添加到`和`时出错,然后`,rust,Rust,我将一个函数传递给,然后返回一个编译器不知道的类型。当与其他选项方法链接时,需要类型注释 fn main() { let w = Some("hi".to_string()); let x: Option<&String> = w.as_ref(); //fails: let y: Option<String> = x.and_then::<String, FnOnce(Option<&Stri
,然后返回一个编译器不知道的类型。当与其他选项方法链接时,需要类型注释
fn main() {
let w = Some("hi".to_string());
let x: Option<&String> = w.as_ref();
//fails:
let y: Option<String> =
x.and_then::<String, FnOnce(Option<&String>) -> Option<String>>(|_inner: &String| None);
//ok:
let y: Option<String> = x.and_then(|_inner: &String| None);
}
这里有多个问题:
- 闭包是一个名称,这意味着您不能命名它们
- 目前不可能有像
FnOnce
这样的简单特征,因为
|| foo
不是一种特质,而是一种具体类型
而是:
或者避免链接:
let y: Option<String> = x.and_then(|_inner| None);
let y = y.and(Some("new String".to_string()));
让y:Option=x,然后(| | u-inner | None);
设y=y.and(Some(“newstring.to_String());
let y = x
.and_then(|_inner| -> Option<String> { None })
.and(Some("new String".to_string()));
let y = x
.and_then(|_inner| None::<String>)
.and(Some("new String".to_string()));
let y: Option<String> = x.and_then(|_inner| None);
let y = y.and(Some("new String".to_string()));