Как преобразовать объект черты в объект "суб-черта"?

Этот код:

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 без изменения черт определения или реализации?

Детская площадка

0 ответов

Другие вопросы по тегам