function - 使用 FnMut 发送函数作为参数
问题描述
在下面的 Rust 代码中,我如何在 ga_optimizer() 中将 objfn() 作为参数传递,知道objfn ( )必须改变self对象并返回 f64 值。
首先,我创建了神经网络结构:
pub struct Neuralnet {
pub weights: Vec<f64>,
}
Trainer 结构使用之前的 Neuralnet 结构,并调用 ga_optimizer() 函数如下:
pub struct Trainer {
neuralnet: Neuralnet,
}
impl Trainer {
pub fn do_learning(&mut self) {
let final_learn_err = ga_optimizer(&mut self, &mut self.objfn());
}
fn objfn(&mut self, genome: &Vec<f64>) -> f64 {
self.neuralnet.update_weights(&genome);
let learn_error = self.learning_error();
}
fn learning_error(&mut self) -> f64 {
let learn_error =0.0f64;
....
learn_error
}
}
训练器使用 FnMut 调用定义如下的 ga_optimizer:
pub fn ga_optimizer(
trainer: &mut Trainer,
fobj: &mut dyn for<'r, 's> FnMut(&'r mut Trainer, &'s Vec<f64>) -> f64
) -> f64
{
....
}
如何将objfn转换为闭包 ???。如果这个方法不起作用,还有另一种?
解决方案
推荐阅读
- microsoft-graph-api - Microsoft Graph - 从授权响应中获取令牌
- kubernetes - 使用声明性 DSL 将 SSH GitHub 存储库添加到 ArgoCD 会提供“需要身份验证”
- r - 如何在多列中替换特定字符串?
- ios - Chargebee 和 Angular Link 问题 IOS
- python - 是否有具有可靠超时的有效 Condition.wait() 替代方案?
- botframework - 访问 IBot 的适配器和配置
- reactjs - 在 React 中处理事件时使用钩子的正确方法是什么
- python - 使用 SQLAlchemy 反映的 Postgres 表无法识别加入的列
- css - css 过渡在 vuejs 中无法正常工作
- homebrew - 无法在 BigSur 上安装 Homebrew “登录被拒绝”