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()));