[英]Returning closure from a closure as return value for function
我正在嘗試習慣impl Fn
,但我不明白這段代碼的錯誤:
fn y(state: bool) -> impl Fn() -> impl Fn(bool) -> bool {
move || {
println!("state, {}", state);
|x: bool| {
println!("state, {}", state);
!x
}
}
}
fn main() {
y(true)()(true);
}
錯誤是:
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
--> src/main.rs:1:35
|
1 | fn y(state: bool) -> impl Fn() -> impl Fn(bool) -> bool {
| ^^^^^^^^^^^^^^^^^^^^^
impl Fn
,但不允許第二個? Box
等)的情況下完成此操作? 如果您仔細閱讀該消息,它會准確解釋問題所在:
`impl Trait` not allowed outside of function and inherent method return types
目前,您只能使用impl Trait
:
fn
在impl
塊之外使用。 fn
在impl Type
塊中使用。 就是這樣。
因此,你不能形成特征Fn() -> impl X
我希望這是一個暫時的限制,因為正在進行的工作是擴展可以使用impl X
的地方,並且需要相關的類型和特征方法。
為什么允許第一個
impl Fn
,但不允許第二個?
第一個impl Fn
是函數的返回類型( y
),因此允許它。 第二個是特征方法的返回類型,所以它不是。
如何在不使用堆的情況下完成此操作?
你可以從第一個Fn
返回一個具體的實例。
例如,如果您不需要狀態,則可以返回fn(bool) -> bool
。
否則,您需要手動創建一個封裝所述狀態的結構,以便能夠命名該類型,而不是依賴於閉包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.