You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:33:35