类型是什么
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)
不会工作,因为最后一部分不是函数指针而是闭包。
类型是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)
游乐场。
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |