【发布时间】:2019-12-22 22:05:27
【问题描述】:
use std::cell::RefCell;
use std::rc::Rc;
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
fn main() {
let closure_cell = Rc::new(RefCell::new(None));
let closure_cell_clone = Rc::clone(&closure_cell);
*closure_cell.borrow_mut() = Some(Closure::wrap(Box::new(move || {
request_animation_frame(closure_cell_clone.borrow().as_ref().unwrap());
})));
}
fn request_animation_frame(f: &Closure<dyn FnMut()>) {
}
在上面的代码中 request_animation_frame 期望 &Closure<dyn FnMut()> 并且我传递了一个实现 FnMnut 的 closure。但我收到一个错误
expected type `std::option::Option<wasm_bindgen::closure::Closure<dyn std::ops::FnMut()>>`
found type `std::option::Option<wasm_bindgen::closure::Closure<[closure@src/lib.rs:29:62: 39:6 bucket:_, world:_, closure_cell_clone:_]>>`
如果闭包可以实现该特征,则默认实现FnMut?不能发送实现 FnMut 的闭包来代替 dyn FnMut 吗?我在这里错过了什么?
【问题讨论】:
-
@FrenchBoiethios 添加了
标签: rust