如何利用Rust的HashMap克服官方文档中闭包的约束?
- 内容介绍
- 文章标签
- 相关推荐
本文共计695个文字,预计阅读时间需要3分钟。
问题概述:值缓存是一种增加泛用性的实用行为,我们可能希望在其他代码中的其他闭包中也能使用它们。然而,目前Cacher的实现存在两个小问题,这使得在不同上下文中复用变得非常困难。
问题一:Cacher的实现细节不明确,导致在不同上下文中难以复用。
问题概述值缓存是一种更加广泛的实用行为,我们可能希望在代码中的其他闭包中也使用他们。然而,目前Cacher的实现存在两个小问题,这使得在不同上下文中复用变得很困难。
第一个问题是Cacher实例假设对于value方法的任何arg参数值总是会返回相同的值。也就是说,这个Cacher的测试会失败:
《rust程序设计语言》13章闭包内容提出的问题
#[test]
fn call_with_different_values() {
let mut c = Cacher::new(|a| a);
let v1 = c.value(1);
let v2 = c.value(2);
assert_eq!(v2, 2);
}
具体代码请在《rust程序设计语言》第13章第一节Cacher实现的限制中找到。
解决思路
尝试修改Cacher存放一个哈希 map 而不是单独一个值。
本文共计695个文字,预计阅读时间需要3分钟。
问题概述:值缓存是一种增加泛用性的实用行为,我们可能希望在其他代码中的其他闭包中也能使用它们。然而,目前Cacher的实现存在两个小问题,这使得在不同上下文中复用变得非常困难。
问题一:Cacher的实现细节不明确,导致在不同上下文中难以复用。
问题概述值缓存是一种更加广泛的实用行为,我们可能希望在代码中的其他闭包中也使用他们。然而,目前Cacher的实现存在两个小问题,这使得在不同上下文中复用变得很困难。
第一个问题是Cacher实例假设对于value方法的任何arg参数值总是会返回相同的值。也就是说,这个Cacher的测试会失败:
《rust程序设计语言》13章闭包内容提出的问题
#[test]
fn call_with_different_values() {
let mut c = Cacher::new(|a| a);
let v1 = c.value(1);
let v2 = c.value(2);
assert_eq!(v2, 2);
}
具体代码请在《rust程序设计语言》第13章第一节Cacher实现的限制中找到。
解决思路
尝试修改Cacher存放一个哈希 map 而不是单独一个值。

