Rust 中返回函数的正确语法是什么?

Smo*_*Ken 15 return function rust

Rust 中返回函数的正确语法是什么?

以下代码无法编译。

  fn identity<T>(a: T) -> T {
    return a;
  };

  fn right<T>(a: T) -> Fn {
    return identity;
  };
Run Code Online (Sandbox Code Playgroud)

Mat*_*haq 12

这里(playground)是一个最小的例子:

fn identity<T>(a: T) -> T {
    return a;
}

fn right<T>(_a: T) -> impl Fn(T) -> T {
    return identity;
}

fn main() {
    println!("{}", right(0)(42))
}
Run Code Online (Sandbox Code Playgroud)

你需要:

  • 在签名中指定输入参数和输出类型,即Fn(T) -> T
  • 指定特征right的返回impl类型。 Fn(T) -> T

或者,您也可以将函数指针编写fn(T) -> T为返回类型。由于这不是一个特征,因此您不需要关键字impl

fn right<T>(_a: T) -> fn(T) -> T {
    return identity;
}
Run Code Online (Sandbox Code Playgroud)

只有fn项目和非捕获闭包可以被强制为函数指针,因此,虽然更简单,但这并不在所有情况下都有效。