Function 如何从不将Vec作为参数的回调内部将值存储在Vec中?
我正在使用一个具有回调函数机制的板条箱。回调是用户定义的,但具有特定的签名,不允许传递其他值。例如:Function 如何从不将Vec作为参数的回调内部将值存储在Vec中?,function,lambda,rust,arguments,closures,Function,Lambda,Rust,Arguments,Closures,我正在使用一个具有回调函数机制的板条箱。回调是用户定义的,但具有特定的签名,不允许传递其他值。例如: fn回调(id:u32,value:u32)->u32; //并将作为这样使用 库函数(回调); 因此,如果我只需要保存到文件或打印,这将是很好的,但是我需要将值保存到向量。 例如,在Python中,我会使用带有“预定义”参数的lambda: def mycallback(预定义、id、值) #就这样称呼它 预定义=[] 库函数(lambda*args:mycallback(预定义,*args
fn回调(id:u32,value:u32)->u32;
//并将作为这样使用
库函数(回调);
因此,如果我只需要保存到文件或打印,这将是很好的,但是我需要将值保存到向量。
例如,在Python中,我会使用带有“预定义”参数的lambda:
def mycallback(预定义、id、值)
#就这样称呼它
预定义=[]
库函数(lambda*args:mycallback(预定义,*args)
解决方案可能涉及其他生锈技巧,但不能每次都写入文件,因为这似乎是一个太多的性能问题。只需使用一个闭包:
let mut vec = Vec::new();
library_function(|id, value| {
vec.push(value);
id
});
与Python代码等效的代码是:
fn callback(vec: &mut Vec<u32>, id: u32, value: u32) -> u32 {
vec.push(value);
id
}
fn main(){
let mut predefined = Vec::new();
library_function(|id, value| callback(&mut predefined, id, value));
}
fn回调(vec:&mut-vec,id:u32,值:u32)->u32{
矢量推力(值);
身份证件
}
fn main(){
让mut预定义=Vec::new();
库函数(| id,value |回调(&mut预定义,id,value));
}
我们之所以称它们为闭包,是因为它们“关闭”了自己的环境。这允许我们使用(在本例中修改)定义闭包的范围内的变量 见:
- 在公园里