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

标签 rust

什么是类型

let plus:Plus = |x| move |y| x + y;

显然,

type Plus = fn(isize) -> fn(isize) -> isize;

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

最佳答案

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

但是,您无法在今天的 Rust 中表达这种类型。使用夜间功能 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;

Playground .

或者你可以装箱:

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

Playground .

关于rust - |x| 的类型是什么移动|y| x+y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71214830/

相关文章:

rust - 是否可以为由所有实现特征的类型组成的任何元组自动实现特征?

multithreading - sync::mpsc 意外关闭 channel

generics - 如果我知道这是可能的,我该如何将泛型 T 转换为 f32?

rust - 有没有办法将 `Vec<Vec<T>>` 转换为 `Vec<T>` ,将所有 `Vec<T>` 组合成一个 `Vec<T>` ?

error-handling - 无法将io::Error从可见结果中移出

rust - 当我添加生命周期时,有没有办法避免向所有下游结构添加生命周期?

rust - 是否可以将 Box 与 no_std 一起使用?

rust - 使用公共(public)命名空间 quick_xml::se 时出错

function - 如何从不将 vec 作为参数的回调内部将值存储在 Vec 中?

rust - 为什么在尝试从采用 &self 的方法返回 Vec 时出现 "borrowed content"错误?