gpt4 book ai didi

function - 如何从不将 vec 作为参数的回调内部将值存储在 Vec 中?

转载 作者:行者123 更新时间:2023-12-03 11:27:38 26 4
gpt4 key购买 nike

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

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 的其他技巧,但它不能每次都写入文件,因为这似乎是一个太大的性能问题。

最佳答案

只需使用一个闭包:

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

我们之所以称它们为闭包,是因为它们“封闭”了它们的环境。这允许我们使用(在这种情况下修改)闭包定义范围内的变量。

参见:

关于function - 如何从不将 vec 作为参数的回调内部将值存储在 Vec 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62060149/

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