向下倾斜一个借来的盒子

时间:2017-02-07 00:08:18

标签: rust borrow-checker

Rust Box类型的downcast()方法要求调用网站拥有Box实例的完全所有权。似乎不是一个可以使用借来的参考的等价物。是否有一个原因?是否有适用于借用实例的解决方法?

1 个答案:

答案 0 :(得分:9)

还有另一种选择,但它不是Box的方法:它是Any::downcast_ref()。感谢deref coersion和Box es Deref - impl,您可以直接在T上调用Box<T>的方法。因此,您可以直接在Any::downcast_ref()上致电Box<Any>

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()来获取可变引用。