gpt4 book ai didi

rust - 如何将多个args传递给rust封闭-预期的封闭需要1个参数

转载 作者:行者123 更新时间:2023-12-03 11:40:18 25 4
gpt4 key购买 nike

我是闭包新手,但我不明白为什么会收到以下错误。

如果我不包括第二个参数,那么它的工作原理是:

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);
}

最佳答案

此解决方案对我有用:声明
fn fold(n: u32, init: u32, op: impl Fn(u32, u32) -> u32) -> u32 {...
并称其为
fold(n, 1, |x: u32, y: u32| -> u32 {x + y })

关于rust - 如何将多个args传递给rust封闭-预期的封闭需要1个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com