Как преобразовать объект черты в объект "суб-черта"?
Этот код:
trait A {}
trait B: A {}
struct S;
impl A for S {}
impl B for S {}
fn main() {
let s = S;
let trait_obj_b: &B = &s;
let trait_obj_a: &A = trait_obj_b;
}
не удается с ошибкой:
error[E0308]: mismatched types
--> src/main.rs:14:27
|
14 | let trait_obj_a: &A = trait_obj_b;
| ^^^^^^^^^^^ expected trait `A`, found trait `B`
|
= note: expected type `&A`
found type `&B`
Зачем? поскольку B
требует A
не должны все черты объектов &B
автоматически реализовать &A
? Есть ли способ конвертировать &B
в &A
без изменения черт определения или реализации?