我try 编写一个闭包,它接收一个闭包(让我们称之为A),该闭包返回一个接收值的闭包,然后将闭包A应用于它.
示例:
let do_some = |f: &dyn Fn(u32) -> u32| move |x: u32| f(x);
let result = do_some(&|v: u32| v * 1111)(7);
观察:
- 闭包
f
是&dyn Fn()
的原因是因为这是编译器允许我将闭包传递给另一个闭包的唯一方式 - 最里面的闭包上的Move运算符是为了避免最里面的闭包borrow
f
问题:
error: lifetime may not live long enough
--> src/main.rs:2:44
|
2 | let do_some = |f: &dyn Fn(u32) -> u32| move |x: u32| f(x);
| - - ^^^^^^^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
| | |
| | return type of closure `[closure@src/main.rs:2:44: 2:57]` contains a lifetime `'2`
| let's call the lifetime of this reference `'1`
当闭包不允许通过<'a'>
表示法指定通用生存期时,如何指定生存期?