2017-02-07 28 views
6

Typ downcast() typu Rusta Box wymaga, aby strona wywołania posiadała pełną własność instancji Box. Nie ma odpowiednika, który może działać z pożyczonym referencją. Czy istnieje ku temu powód? Czy istnieje obejście, które będzie działało na pożyczonej instancji?Downcasting pożyczonego pudełka

Odpowiedz

9

Istnieje alternatywa, ale nie jest to metoda Box: jest to Any::downcast_ref(). Dzięki derefowi coersion i Box es Deref -impl, możesz wywoływać metody T bezpośrednio na Box<T>. W ten sposób można wywołać Any::downcast_ref() na swojej Box<Any> bezpośrednio:

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); 

Istnieje również Any::downcast_mut() aby uzyskać zmienny odniesienia.