Поле не преобразуется автоматически в ссылку - PullRequest
0 голосов
/ 09 сентября 2018

Я храню Box в HashMap. Я хотел бы получить эти значения и преобразовать их в ссылки на упакованный тип. Мой код выглядит так:

use std::collections::HashMap;

trait A {}

trait B {
    fn get(&self, key: &'static str) -> Option<&A>;
}

struct C {
    map: HashMap<&'static str, Box<A>>,
}

impl B for C {
    fn get(&self, key: &'static str) -> Option<&A> {
        return self.map.get(key)
    }
}

Я получаю ошибку:

expected trait A, found struct `std::boxed::Box`

Как правильно преобразовать Option<&Box<&A>> в Option<&A>?

1 Ответ

0 голосов
/ 09 сентября 2018

Вы можете разыменовать поле и создать ссылку на него:

impl B for C {
    fn get(&self, key: &'static str) -> Option<&A> {
        return self.map.get(key).map(|value| &**value)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...