gpt4 book ai didi

rust - 是否可以检查 rust 的闭合度是否相等?

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

我刚接触 rust ,但是对于我正在从事的实践项目,我想实现一个像API这样的React useMemo,我认为如果闭包的类型是静态的,并且捕获变量存储在某个地方,我应该无法检查平等性?
就像是:

let cached = scope.use_memo(move || {
complicated_computation(captured_variable)
});
其中use_memo就像
pub fn use_memo<F: Fn() -> T + PartialEq + 'static, T: Clone + 'static>(&mut self, factory: F) -> &T
在代码中的什么地方,我可以将工厂与以前存储的工厂函数进行比较,并确定是否需要重新运行工厂。
显然,这是行不通的,因为闭包没有实现 PartialEq,但是我想知道是否有办法实现它。

最佳答案

我认为这是不可能的:Rust闭包在某种程度上是匿名类型,因此您无法在它们或任何东西上实现特征。而且,如果您使用了更多的“显式”闭包,您可以在其中手工构建环境并传递一个简单的函数指针:

fn use_memo<T: PartialEq>(&mut self, env: T, func: fn(T))
您可以将它们进行比较:
fn main(){
let a: fn(u8) -> u8 = |a: u8| a;
let b: fn(u8) -> u8 = |a: u8| a % 2;
println!("{}", a == b) -> false
}
但是您会遇到一个问题,即不同的回调将具有不同的环境,因此类型将不匹配,并且可能仍然无法比较它们。

关于rust - 是否可以检查 rust 的闭合度是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63663348/

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