Реализация признака индекса для возврата значения, которое не является ссылкой

У меня есть простая структура, которую я хотел бы реализоватьIndex но, как новичок в Rust, у меня возникли некоторые проблемы с проверкой заимствований. Моя структура довольно проста, я бы хотел, чтобы она хранила начальные и пошаговые значения, а затем при индексацииusize должно вернутьсяstart + idx * step:

pub struct MyStruct {
    pub start: f64,
    pub step: f64,
}

Моя интуиция заключается в том, что я просто смогу взять подписьIndex и подключите мои типы:

impl Index<usize> for MyStruct {
    type Output = f64;

    fn index(&self, idx: usize) -> &f64 {
        self.start + (idx as f64) * self.step
    }
}

Это дает ошибкуmismatched types поговоркаexpected type &f64, found type f64, Как человек, который еще не полностью понял, как работает система типов Rust, я попытался просто дать пощечину& по выражению:

fn index(&self, idx: usize) -> &f64 {
    &(self.start + (idx as f64) * self.step)
}

Теперь это говорит мне, чтоborrowed value does not live long enoughтак, может быть, для этого нужна переменная времени жизни?

fn index<'a>(&self, idx: usize) -> &'a f64 {
    &(self.start + (idx as f64) * self.step)
}

Ошибка та же, но теперь записка даетlifetime 'a вместоlifetime #1Я думаю, это не обязательно, но в этот момент я чувствую, что застрял. Я запутался, что такое простое упражнение для большинства языков стало так трудно реализовать в Rust, так как все, что я хочу сделать, это вернуть вычисление из функции, которая оказывается за ссылкой. Как я должен идти о реализацииIndex для простой структуры, где стоимость рассчитывается по требованию?

Ответы на вопрос(2)

Ваш ответ на вопрос