首页 > 解决方案 > 如何调用作为字段的`dyn Fn`?

问题描述

struct DummyRtspClient<'a> {
    on_produce: &'a dyn Fn(EncodedPacket)
}

impl ... for DummyRtspClient {
    fn set_on_produce(&self, f: &'a dyn Fn(EncodedPacket)){
        self.on_produce = f;
    }
}

那我该怎么用on_produce

我试过了

let encoded_packet = EncodedPacket{
    data: Vec::new(),
};
self.on_produce(encoded_packet);

但它说这on_produce不是成员函数,而是一个字段。

我试过了self.on_produce.call(encoded_packet),但我也遇到了错误。

标签: rust

解决方案


你的错误信息应该是这样的:

error[E0599]: no method named `on_produce` found for reference `&DummyRtspClient<'a>` in the current scope
  --> src/lib.rs:14:18
   |
14 |             self.on_produce(encoded_packet);
   |                  ^^^^^^^^^^ field, not a method
   |
help: to call the function stored in `on_produce`, surround the field access with parentheses
   |
14 |             (self.on_produce)(encoded_packet);
   |             ^               ^

特别是,第二部分准确地告诉你如何解决这个问题:用self.on_produce一组括号括起来以消除它试图调用成员函数的歧义。


推荐阅读