【问题标题】:Iterate over and call closures in FnMut vector在 FnMut 向量中迭代并调用闭包
【发布时间】:2016-07-12 14:31:00
【问题描述】:

我有一个类似这样的struct

struct Foo<'a> {
    callbacks: Vec<&'a FnMut(u32)>,
}

我想调用每个回调,但我的尝试不起作用:

fn foo(&mut self) {
    for f in &mut self.callbacks {
        (*f)(0);
    }
}

我收到此错误:

error: cannot borrow immutable borrowed content `**f` as mutable

我也试过iter_mut(),但我得到了同样的错误。

【问题讨论】:

    标签: loops closures rust


    【解决方案1】:

    FnMut 接受一个可变接收器,因此您必须有一个可变引用才能调用它:

    struct Foo<'a> {
        callbacks: Vec<&'a mut FnMut(u32)>,
    }
    

    【讨论】:

    • 谢谢。老实说,我曾经尝试过,但由于另一个错误(现已修复)以及它看起来很奇怪而产生了怀疑。在哪里可以了解有关接收器的更多信息?
    • Receiver 是FnFnMutFnOnce 特征描述中的self 参数的名称。您可以在the book 中阅读有关 self 参数的信息。
    • 好的,我换个说法。在闭包的上下文中,self 是什么?是封闭环境吗?
    • 对不起,我的困惑。对于闭包,是的, self 是闭包的上下文。您还可以为任何结构实现FnMut trait(尽管它不稳定),在这种情况下,self 是对结构实例的可变引用,就像在其他 trait 实现中一样。
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2021-04-03
    • 2010-10-02
    • 2013-02-26
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多