Implementando a característica do índice para retornar um valor que não é uma referência

Eu tenho uma estrutura simples que eu gostaria de implementarIndex mas, como recém-chegado ao Rust, estou tendo vários problemas com o verificador de empréstimos. Minha estrutura é bem simples, gostaria de armazenar um valor inicial e de etapa e, em seguida, quando indexado por umusize deveria retornarstart + idx * step:

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

Minha intuição é que eu seria simplesmente capaz de assumir a assinatura deIndex e conecte meus tipos:

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

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

Isso dá o erromismatched types dizendoexpected type &f64, found type f64. Como alguém que ainda não entendeu completamente como funciona o sistema de tipos da Rust, tentei simplesmente dar um tapa& na expressão:

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

Isso agora me diz que oborrowed value does not live long enough, então talvez precise de uma variável vitalícia?

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

O erro é o mesmo, mas a nota agora fornecelifetime 'a ao invés delifetime #1, então acho que isso não é necessário, mas neste momento sinto que estou preso. Estou confuso que um exercício tão simples para a maioria das linguagens tenha se tornado tão difícil de implementar no Rust, pois tudo o que quero fazer é retornar um cálculo a partir de uma função que por trás de uma referência está por trás. Como devo implementarIndex para uma estrutura simples em que o valor é calculado sob demanda?

questionAnswers(2)

yourAnswerToTheQuestion