【问题标题】:Downcasting a borrowed box贬低一个借来的盒子
【发布时间】:2017-02-07 00:08:18
【问题描述】:

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

【问题讨论】:

    标签: rust borrow-checker


    【解决方案1】:

    还有一个替代方法,但它不是Box 的方法:它是Any::downcast_ref()。感谢 deref coersion 和 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()获取可变引用。

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2019-12-30
      • 2018-09-16
      • 2020-10-19
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多