gpt4 book ai didi

Rust 类型不匹配解决 `for<' r> ...` 带有闭包特征别名参数

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

Trait 别名现在不是稳定的 Rust,但我尝试通过执行以下操作来模拟它们(为特定类型的闭包提供更好的名称)

trait MyCallback: FnMut(&u32) -> () { }

impl<F: FnMut(&u32) -> ()> MyCallback for F { }

这对于我需要的其他类型的特征别名非常有用。但是当我尝试使用特征别名时,我遇到了无法解决的终身问题(?)。考虑以下两个重复函数,仅使用 MyCallback在第二种情况下替换为它的“定义”。

fn process_data(mut f: impl MyCallback) -> () {
f(&0)
}

fn process_data_2(mut f: impl FnMut(&u32) -> ()) -> () {
f(&0)
}

fn main() {
// Doesn't compile
process_data(|_| ());

// Compiles
process_data_2(|_| ());
}

(关于 Playground 的完整示例。)
正如评论的那样,使用别名的函数不会接受我想传递的参数。我猜我需要在特征定义中手动插入一些生命周期来模拟编译器在解析 process_data_2 时隐式执行的操作。 ,但我不知道如何继续(我尝试插入 for<'a> 子句,我刚刚了解到,都失败了)。

我怎样才能使我的代码编译?

最佳答案

要使其编译,您可以在闭包中添加类型注释:

process_data(|_: &u32| ());

这似乎与 this longstanding issue有关.

关于Rust 类型不匹配解决 `for<' r> ...` 带有闭包特征别名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61671460/

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