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;
}
发布一次