Получение «не может извлечь связанный тип из более высокого ранга, связанного в этом контексте», ошибка в Rust - PullRequest
0 голосов
/ 14 марта 2020

Когда я запускаю этот код, который использует более высокие оценки границ:

pub trait MyTrait<'a> {
    type Output: 'a;
    fn gimme_value(&self) -> Self::Output;
}

pub fn meow<T: for<'a> MyTrait<'a> + 'static>(val: &T) -> T::Output {
    val.gimme_value()
}

Я вижу эту ошибку:

error[E0212]: cannot extract an associated type from a higher-ranked trait bound in this context

Как я могу сделать свою функцию meow вернуть этот связанный тип, в то же время позволяя T быть признаком с более высоким рейтингом?

1 Ответ

1 голос
/ 14 марта 2020

Просто добавьте новый шаблон c в функцию meow - назовем его R. При добавлении ограничения черты для T определите, что T::Output равно R. Затем верните функцию R вместо T::Output:

pub trait MyTrait<'a> {
    type Output: 'a;
    fn gimme_value(&self) -> Self::Output;
}

pub fn meow<R, T: for<'a> MyTrait<'a, Output=R> + 'static>(val: &T) -> R {
    val.gimme_value()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...