|x| 的类型是什么 移动|y| x + y?

Fun*_*tor 2 rust

类型是什么

let plus:Plus = |x| move |y| x + y;
Run Code Online (Sandbox Code Playgroud)

明显地,

type Plus = fn(isize) -> fn(isize) -> isize;
Run Code Online (Sandbox Code Playgroud)

不会工作,因为最后一部分不是函数指针而是闭包。

Cha*_*man 6

类型是impl Fn(isize) -> (impl Fn(isize) -> isize). 它可以被强制为fn(isize) -> (impl Fn(isize) -> isize),因为外部闭包不会捕获。

然而,你无法在今天的 Rust 中表达这种类型。通过 nightly 功能type_alias_impl_trait,您可以将其分为两种类型:

#![feature(type_alias_impl_trait)]

type Adder = impl Fn(isize) -> isize;
type Plus = fn(isize) -> Adder;
let plus: Plus = |x| move |y| x + y;
Run Code Online (Sandbox Code Playgroud)

游乐场

或者你可以把它装箱:

type Plus = fn(isize) -> Box<dyn Fn(isize) -> isize>;
let plus: Plus = |x| Box::new(move |y| x + y);
Run Code Online (Sandbox Code Playgroud)

游乐场