Как передать несколько аргументов в замыкание ржавчины - ожидаемое замыкание, которое принимает 1 аргумент - PullRequest
0 голосов
/ 30 января 2019

Я новичок в замыканиях, и я не понимаю, почему я получаю приведенную ниже ошибку.Если я не включу второй аргумент, например:

fn obj_x(x: Vec<f64>) -> f64 {
    return 0.0;
};

let f = |x: &Vec<f64>| obj_x(x.to_vec());

Вот мое закрытие:

fn foo() {
    let f = |x: &Vec<f64>, N: usize| obj_x(x.to_vec(), N);
}

fn obj_x(x: Vec<f64>, N: usize) -> f64 {
    let x = (x[0] + 4.0).powf(2.0);

    return x;
}

error[E0593]: closure is expected to take 1 argument, but it takes 2 arguments
   --> src/main.rs:120:44
    |
114 |     let f = |x: &Vec<f64>, N: usize | obj_x(x.to_vec(),N);
    |             ------------------------- takes 2 arguments
...
120 |         let mut fmin = Funcmin::new(&mut x,&f,&g,"cg");
    |                                            ^^ expected closure that takes 1 argument
    |

Вот мой полный код:

fn obj_x(x: Vec<f64>, N: usize) -> f64 {
    let x = (x[0] + 4.0).powf(2.0);

    return x;
}

fn gradient_x(x: Vec<f64>) -> Vec<f64> {
    return vec![2.0 * (x[0] + 4.0)];
}

fn test() {
    let f = |x: &Vec<f64>, &N: usize| obj_x(x.to_vec(), N);
    let g = |x: &Vec<f64>| gradient_x(x.to_vec());
    let mut x = vec![40.0f64];
    let mut N = 2220;
    {
        //you must create a mutable object
        let mut fmin = Funcmin::new(&mut x, &f, &g, "cg");
        fmin.minimize();
    }
    println!("{:?}", x);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...