主要观点:作者在使用 Rust 的 HashMap 和 lifetimes 时遇到奇怪的复杂性问题,通过多种方式尝试解决但仍存在困惑。
关键信息:
- 用
HashMap跟踪 HTTP 请求统计时遇到问题,如在HostStats结构中查找主机时的生命周期限制。 - 尝试用
HostRef类型但无法实现Borrowtrait,Cow几乎可行但get签名中存在生命周期问题。 - 编写
try_record方法时代码无法编译,存在error[E0521]: borrowed data escapes outside of method错误。 - 最终通过绕过问题解决,如使用
hashbrown库的Equivalenttrait 或直接使用其 raw entry API。 - Andrew Werner 给出一种很好的定义键类型的方式,通过将
Host拆分为HostKey和Host来解决Borrow问题。
重要细节: - 在
HostStats结构中,get方法需要处理不同的生命周期,record方法处理拥有的主机名时生命周期推断工作正常。 - 在使用
Cow时,插入和获取键时代码可以编译,但get签名中的生命周期处理存在困惑。 try_record方法中的额外复杂性导致编译器错误,具体原因未明确。hashbrown库提供了两种解决办法,get基于Equivalenttrait,还有 raw entry API。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。