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
6
A
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.