考虑到函数需要一个具有静态生命周期的“处理程序”,我如何将方法传递给函数?
(这背后的确切用例是在结构中创建铁链)。
考虑到我们有以下结构Chain
:
struct Chain
{
f: Box<dyn Fn()>
}
impl Chain
{
fn new(handler: impl Fn() + 'static) -> Self
{
return Chain { f: Box::new(handler) };
}
fn invoke(&self)
{
(self.f)();
}
}
当尝试Chain
使用闭包创建 this 的实例时,同时还在闭包中传递一个方法......
struct MyStruct
{
the_answer: u32
}
impl MyStruct
{
pub fn run(&self)
{
let closure = || {
println!("Closure called");
self.printer_method(String::from("printer_method")); // <-- Problematic line
};
let chain = Chain::new(closure);
chain.invoke();
}
fn printer_method(&self, msg: String)
{
// Access to self.the_answer
println!("The answer is {}, your message is: {}", self.the_answer, msg);
}
}
...编译器给出以下错误:
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
我玩过声明MyStruct
及其成员静态的想法,但是能够创建结构的多个独立实例是一个要求(参见 Iron Web 服务器的多个实例)。
这是一个游乐场链接。