gpt4 book ai didi

closures - 如何编写可以组成 `FnMut` 闭包的函数?

转载 作者:行者123 更新时间:2023-11-29 08:27:37 24 4
gpt4 key购买 nike

这是一个可以组合Fn 闭包的compose 函数:

fn compose<'a, T1, T2, T3, F1, F2>(f: F1, g: F2) -> Box<Fn(T1) -> T3 + 'a>
where F1: Fn(T1) -> T2 + 'a,
F2: Fn(T2) -> T3 + 'a
{
box move |x| g(f(x))
}

如何才能让这个 compose 函数接受 FnMut 闭包?我试过:

fn compose<'a, T1, T2, T3, F1, F2>(f: F1, g: F2) -> Box<FnMut(T1) -> T3 + 'a>
where F1: FnMut(T1) -> T2 + 'a,
F2: FnMut(T2) -> T3 + 'a
{
box move |x| g(f(x))
}

但它提示:

error: cannot borrow captured outer variable in an `FnMut` closure as mutable
box move |x| g(f(x))
^
error: cannot borrow captured outer variable in an `FnMut` closure as mutable
box move |x| g(f(x))
^

扩展它,是否可以让它与 FnOnce 闭包一起工作?

最佳答案

局部变量 fg 必须是可变的:

fn compose<'a, T1, T2, T3, F1, F2>(mut f: F1, mut g: F2) -> Box<FnMut(T1) -> T3 + 'a>
where F1: FnMut(T1) -> T2 + 'a,
F2: FnMut(T2) -> T3 + 'a
{
Box::new(move |x| g(f(x)))
}

关于closures - 如何编写可以组成 `FnMut` 闭包的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36284637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com