6
のタイプのRustのBox
タイプでは、コールサイトはBoxインスタンスの完全な所有権を必要とします。借用された参照で機能することはできません。これには理由がありますか?借りたインスタンスで動作する回避策はありますか?借用されたボックスのダウンキャスト
のタイプのRustのBox
タイプでは、コールサイトはBoxインスタンスの完全な所有権を必要とします。借用された参照で機能することはできません。これには理由がありますか?借りたインスタンスで動作する回避策はありますか?借用されたボックスのダウンキャスト
代わりがありますが、Box
の方法ではありません:Any::downcast_ref()
です。デフレクションとBox
Deref
-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()
が変更可能な参照を取得することもあります。