2017-02-07 7 views
6

のタイプのRustのBoxタイプでは、コールサイトはBoxインスタンスの完全な所有権を必要とします。借用された参照で機能することはできません。これには理由がありますか?借りたインスタンスで動作する回避策はありますか?借用されたボックスのダウンキャスト

答えて

9

代わりがありますが、Boxの方法ではありません:Any::downcast_ref()です。デフレクションとBoxDeref -implのおかげでTのメソッドをBox<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()が変更可能な参照を取得することもあります。

関連する問題