Нет.Как вы уже знаете, impl Trait
- это механизм возврата экземпляра черты без бокса.
Если вы попытаетесь расширить это:
fn add2() -> impl Fn(i32) -> impl Fn(i32) -> i32 {
|x| |y| x + y
}
Компилятор скажет вам:
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
--> src/lib.rs:9:30
|
9 | fn add2() -> impl Fn(i32) -> impl Fn(i32) -> i32 {
| ^^^^^^^^^^^^^^^^^^^
Из impl Trait
RFC, выделите мое:
impl Trait
может быть записан только в пределах типа возврата автономной или врожденной функции impl, но не в определениях признаков или какой-либо позиции невозвращаемого типа.Они также могут не отображаться в возвращаемом типе закрывающих признаков или указателей на функции, если только они сами не являются частью допустимого возвращаемого типа.
- В конечном итоге мы захотим разрешить этой функции бытьиспользуется в чертах
Возвращаемым типом закрытия является связанный тип свойства закрытия:
pub trait FnOnce<Args> {
type Output;
extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
}
См. также: