[英]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.