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