压低借来的箱子
Downcasting a borrowed box
Rust 的 Box
类型的 downcast()
方法要求调用站点拥有 Box 实例的完全所有权。似乎没有可以与借用参考一起使用的等价物。是否有一个原因?是否有适用于借用实例的解决方法?
有一个替代方法,但它不是 Box
的方法:它是 Any::downcast_ref()
。感谢 deref 强制和 Box
es Deref
-impl,您可以直接在 Box<T>
上调用 T
的方法。因此,您可以直接在 Box<Any>
上调用 Any::downcast_ref()
:
let b: Box<Any> = Box::new(27u64);
// The type of `ref_a` and `ref_b` is `&u64`
let ref_a = b.downcast_ref::<u64>().unwrap();
let ref_b = b.downcast_ref::<u64>().unwrap();
println!("{} == {}", ref_a, ref_b);
还有Any::downcast_mut()
获取可变引用
Rust 的 Box
类型的 downcast()
方法要求调用站点拥有 Box 实例的完全所有权。似乎没有可以与借用参考一起使用的等价物。是否有一个原因?是否有适用于借用实例的解决方法?
有一个替代方法,但它不是 Box
的方法:它是 Any::downcast_ref()
。感谢 deref 强制和 Box
es Deref
-impl,您可以直接在 Box<T>
上调用 T
的方法。因此,您可以直接在 Box<Any>
上调用 Any::downcast_ref()
:
let b: Box<Any> = Box::new(27u64);
// The type of `ref_a` and `ref_b` is `&u64`
let ref_a = b.downcast_ref::<u64>().unwrap();
let ref_b = b.downcast_ref::<u64>().unwrap();
println!("{} == {}", ref_a, ref_b);
还有Any::downcast_mut()
获取可变引用