rust - 如何通过对象安全方法中的动态调度传递闭包?
问题描述
如何将闭包传递给对象安全的 trait 方法或通过动态调度?
我自己已经回答了这个问题,但答案留下了一些不足:FnOnce
闭包必须装箱,因为它们没有尺寸并且必须在使用时消耗(因此不能通过引用传递)。
解决方案
您可以在不使用的情况下通过它Box
:
fn pass_fn_once(do_thing: &dyn FnOnce()) {
//do_thing();
}
fn main() {
pass_fn_once(&|| println!("Hello!"));
}
但是,您将无法真正调用do_thing
in pass_fn_once
,因为它只是借用的 -调用 anFnOnce
会消耗它。
如果它们被Box
ed,您可以确定它pass_fn_once
取得了所有权,以便之后可以丢弃关闭。
推荐阅读
- c# - 无法在 Chrome 中打开下载的 PDF 文件
- java - 在 android studio 上找不到主题编辑器
- angular - 用角度4中的routerLink替换当前动态参数
- git - 同一上下文的多个 git 凭据
- python - 如果在 Pandas 中交换后列值相同,则删除重复项
- sorting - 根据相似度度量(例如余弦相似度等)对 Holoviews Heatmap 的列和行重新排序
- jquery - 根据屏幕大小禁用 jQuery
- python - 根据输入参数的数量具有不同行为的函数
- extjs - 基于网格数据 extjs 6.2 禁用 tbar 按钮
- r - R:修复损坏的 Rmd(错误编码)