首页 > 解决方案 > 使用 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转换为闭包 ???。如果这个方法不起作用,还有另一种?

标签: functionrustarguments

解决方案


推荐阅读