Rust中Closure特征使用泛型替代具体类型是否可行?
Rust泛型缓存结构实现问题
问题背景
我近期通过Rust官方教程学习Rust,学到闭包章节(第13章第1节)末尾时,教程提到可以通过引入更多泛型参数,让单个缓存结构支持接收不同类型参数的闭包、返回对应类型的结果。
当前Cacher实现存在第二个问题:它仅支持接收单个
u32类型参数、返回u32类型值的闭包。例如我们可能需要缓存接收字符串切片、返回usize值的闭包执行结果,要修复该问题,可尝试引入更多泛型参数提升Cacher功能的灵活性。
现有实现代码
我按照这个思路编写了如下代码:
struct Cacher<T, V> { calculation: T, value: Option<V> } impl<T> Cacher<T, u32> where T: Fn(u32) -> u32, // 注意Fn是trait,fn是常规的函数关键字 { fn new(calculation: T) -> Cacher<T, u32> { Cacher { calculation, value: None } } fn get_value(&mut self, args: u32) -> Option<u32> { match self.value { None => { let res = (self.calculation)(args); self.value = Some(res); self.value } _ => { self.value } } } } struct BetterCache<T, V> { compute_function: T, value: Option<V> } impl<T, V> BetterCache<T, V> where T: Fn(V) -> V { // 未完成的实现 }
问题说明
代码中的BetterCache是我尝试实现的泛型缓存结构,目前的写法无法满足支持多类型闭包缓存的需求,想知道正确的实现方式是什么。
内容的提问来源于stack exchange,提问作者Navin Shrinivas
相关产品推荐
相关产品推荐

