Rust 是否有可能在不使用盒子的情况下返回一个生锈的封口?

Rust 是否有可能在不使用盒子的情况下返回一个生锈的封口?,rust,closures,Rust,Closures,在框中轻松包裹内封盖: fn add1() -> impl Fn(i32) -> Box<Fn(i32) -> i32> { |x| Box::new(|y| x + y) } 我可以用一些东西来替换?以进行代码类型检查吗?否。正如您已经知道的,impl Trait是一种无需装箱即可返回Trait实例的机制 如果您尝试扩展此功能: fn add2() -> impl Fn(i32) -> impl Fn(i32) -> i32 {

框中轻松包裹内封盖

fn add1() -> impl Fn(i32) -> Box<Fn(i32) -> i32> {
    |x| Box::new(|y| x + y)
}

我可以用一些东西来替换
以进行代码类型检查吗?

否。正如您已经知道的,
impl Trait
是一种无需装箱即可返回Trait实例的机制

如果您尝试扩展此功能:

fn add2() -> impl Fn(i32) -> impl Fn(i32) -> i32 {
    |x| |y| x + y
}
编译器告诉您:

错误[E0562]:`impl Trait`不允许在函数和固有方法返回类型之外
-->src/lib.rs:9:30
|
9 | fn add2()->impl fn(i32)->impl fn(i32)->i32{
|                              ^^^^^^^^^^^^^^^^^^^
impl Trait
RFC,强调我的:

impl Trait
只能在 独立或固有的impl功能,不在特征定义或定义中 任何非返回类型的位置。它们也可能不会出现在返回中 闭包特征或函数指针的类型,除非 它们本身是合法返回类型的一部分

  • 最终,我们希望允许在traits中使用该功能
闭包的返回类型是闭包特性的关联类型:

pub trait FnOnce<Args> {
    type Output;
    extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
}
发布一次

  • 否。正如您已经知道的,
    impl Trait
    是一种无需装箱即可返回Trait实例的机制

    如果您尝试扩展此功能:

    fn add2() -> impl Fn(i32) -> impl Fn(i32) -> i32 {
        |x| |y| x + y
    }
    
    编译器告诉您:

    错误[E0562]:`impl Trait`不允许在函数和固有方法返回类型之外
    -->src/lib.rs:9:30
    |
    9 | fn add2()->impl fn(i32)->impl fn(i32)->i32{
    |                              ^^^^^^^^^^^^^^^^^^^
    
    impl Trait
    RFC,强调我的:

    impl Trait
    只能在 独立或固有的impl功能,不在特征定义或定义中 任何非返回类型的位置。它们也可能不会出现在返回中 闭包特征或函数指针的类型,除非 它们本身是合法返回类型的一部分

    • 最终,我们希望允许在traits中使用该功能
    闭包的返回类型是闭包特性的关联类型:

    pub trait FnOnce<Args> {
        type Output;
        extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
    }
    
    发布一次