Rust 我能';我不理解这个MCVE中的生命周期问题,它的灵感来自我的ODE解算器代码

Rust 我能';我不理解这个MCVE中的生命周期问题,它的灵感来自我的ODE解算器代码,rust,Rust,我试图为Runge-Kutta解算器编写代码,其思想是它应该解决“大”对象上的ODE,因此应该是通用的,而不是在每一行都使用copy。我有一个终身问题,我已将其提交给以下MCVE(): 使用std::ops; fn步骤(f:f,y:&'a y,t:f64)->() 哪里 "a:"b,, F:Fn(&Y,f64)->Y, f64:ops::Mul src/lib.rs:10:25 | 3 | fn步骤(f:f,y:&a-y,t:f64)->() |--此处定义的生存期“b” ... 10 |设fo

我试图为Runge-Kutta解算器编写代码,其思想是它应该解决“大”对象上的ODE,因此应该是通用的,而不是在每一行都使用copy。我有一个终身问题,我已将其提交给以下MCVE():

使用std::ops;
fn步骤(f:f,y:&'a y,t:f64)->()
哪里
"a:"b,,
F:Fn(&Y,f64)->Y,
f64:ops::Mul src/lib.rs:10:25
|
3 | fn步骤(f:f,y:&a-y,t:f64)->()
|--此处定义的生存期“b”
...
10 |设foo=1./5. * &k0;
|                         ^^^
|                         |
|借来的价值活得不够长
|要求为“b”借用“k0”`
11 | }
|-'k0'在借的时候掉在这里了
,正如副本所示。也见
use std::ops;

fn step<'a, 'b, Y, F>(f: F, y: &'a Y, t: f64) -> ()
where
    'a: 'b,
    F: Fn(&Y, f64) -> Y,
    f64: ops::Mul<&'b Y, Output = Y>,
{
    let k0 = f(y, t);
    let foo = 1. / 5. * &k0;
}
error[E0597]: `k0` does not live long enough
  --> src/lib.rs:10:25
   |
3  | fn step<'a, 'b, Y, F>(f: F, y: &'a Y, t: f64) -> ()
   |             -- lifetime `'b` defined here
...
10 |     let foo = 1. / 5. * &k0;
   |                         ^^^
   |                         |
   |                         borrowed value does not live long enough
   |                         requires that `k0` is borrowed for `'b`
11 | }
   | - `k0` dropped here while still borrowed