rust - 如何在通用结构中定义 const 闭包
问题描述
我正在尝试声明一个 const 闭包,以便可以在整个代码中使用:
impl<T: Default + Copy + Eq> Profiler<T> {
pub const increase_by_one: dyn Fn(&T) = &|x| {
*x = *x + 1;
};
但是我遇到了在编译时不知道大小的问题。
我也试过这个:
impl<T: Default + Copy + Eq> Profiler<T> {
pub const increase_by_one: fn(&T) = &|x| {
*x = *x + 1;
};
但它说x
必须知道的类型。
有没有办法在通用结构中定义闭包?
解决方案
今天不可能const
在 Rust 中定义一个闭包,因为闭包的类型不能被命名。您可以使用函数指针 ( fn(&T)
),但与闭包类型相比,这会产生调用时间开销。您可以使用'static
特征对象引用 ( &'static dyn Fn(&T)
),但这也有调用时间开销,并且需要一个T: 'static
界限。
幸运的是,const
永远不需要关闭。闭包和项目之间的唯一区别fn
是闭包可以有状态,但const
s 可能没有状态,因此将它们组合起来没有任何意义。只需使用关联函数而不是关联常量。
impl<T: AddAssign<i32>> Profiler<T> {
pub fn increase_by_one(x: &mut T) {
*x += 1;
}
}
也可以看看
推荐阅读
- java - apache poi 是否与 xalan jar 有任何依赖关系?
- python - 类似于 R 的 diffr 的 python 库
- c++ - 对于 Mask RCNN 模型,较小的图像对 OpenCV 中的推理时间几乎没有影响
- javascript - e.slice 不是函数
- druid - Druid - 防止在每次 CSV 摄取时创建新分区
- scala - Spark 与 Scala:通过在每个可能对上执行函数来计算表
- laravel - Laravel Sanctum 在不创建新令牌的情况下检索 PlainTextToken
- javascript - 是否可以在没有网络访问和服务器的情况下在本地使用反应?
- python - 将集合列表转换为字典
- python - 计算没有 sklearn 的机器学习模型的准确率