Rust 任意部分 3:最终我们有了向上转换

主要观点:三年前在博客分享了As-Any Hack,目标是让类似AnyBox的结构体在稳定 Rust 中实现向上转型到超特性,即DebugAny,但存在问题,虽DebugAny继承自Any,却不能在dyn DebugAny上使用Any的方法,如downcast_ref,在main函数中调用会报错,对AnyBox进行&dyn Any的转换也会报错,不过截至 Rust 1.86 此问题已修复,现在转换可以正常工作,此修复在 beta 通道,稳定版即将发布,很多旧的 hack 可以退役,同时给出了无需 as-any hack 的扩展映射Extensions的代码实现,包含插入、获取和获取可变值等方法,该文章被标记为rust
关键信息:三年前分享的 hack 及存在问题,Rust 1.86 修复的情况,Extensions结构体的相关方法及用途,文章的标签。
重要细节AnyBox结构体的定义,DebugAny特性的实现,Extensions结构体中各种方法的具体实现逻辑,如insert方法将值插入映射,getget_mut方法获取特定类型的值等。

阅读 9
0 条评论