在锈中的回调函数中保存值

问题描述 投票:0回答:1

我正在使用具有回调函数机制的板条箱。回调是用户定义的,但具有特定的签名,该签名不允许传递其他值。例如:

fn callback(id: u32, value: u32) -> u32;

// and would be used as such
library_function(callback);

因此,如果我只需要保存到文件或打印,这很好,但是我需要将值保存到矢量。我将在例如Python中完成的工作是使用带有“预定义”参数的lambda:

def mycallback(predefined, id, value)

# and calling it as such
predefined = []
library_function(lambda *args: mycallback(predifined, *args)

该解决方案可能涉及Rust的其他技巧,但是由于似乎性能问题太多,因此无法每次都将其写入文件。

如果您需要特定信息,则所涉及的板条箱为超扫描:https://github.com/flier/rust-hyperscan

function lambda rust arguments closures
1个回答
2
投票

只需使用闭包:

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));
}
© www.soinside.com 2019 - 2024. All rights reserved.