Rust的downcast()类型的Box方法要求调用站点完全拥有Box实例的所有权。似乎没有一个类似的,可以用一个借来的参考。这有什么原因吗?是否有一种解决办法可以适用于借来的实例?
发布于 2017-02-07 00:14:52
还有一种选择,但这不是Box的一种方法:它是Any::downcast_ref()。由于deref强制和Boxes 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()来获取可变引用。
https://stackoverflow.com/questions/42079539
复制相似问题