Rust类型不匹配,使用闭包特征别名参数解析`for <'r> ...`

基利角

特性别名现在不在稳定的Rust中,但是我尝试通过以下方式模拟它们(为特定的闭包命名更好的名称)

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

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

这对于我需要的其他种类的特征别名非常有效。但是,当我尝试使用trait别名时,遇到了无法解决的终身问题(?)。考虑以下两个重复的函数,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上的完整示例。)如前所述,使用别名的函数将不接受我想要传递的参数。我猜想我需要在trait定义中手动插入一些生存期,以模拟编译器在解析时隐式执行的操作process_data_2,但我不知道该如何进行(我尝试了解的插入for<'a>子句的尝试,全部失败)。

如何使我的代码编译?

nnnm毫米

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

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

这似乎与这个长期存在的问题有关

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试在 R 中使用闪亮的应用程序创建未来价值计算器并得到错误:参数 1(类型“闭包”)无法由“猫”处理

一个以特征为参数的Rust闭包

R语言:“闭包”类型的对象在应用[with lapply

“闭包”类型的对象在 R Shiny 中不可子集化

“闭包”类型的 R studio/Sweave 对象不可子集化

将闭包传递给特征方法:期望的类型参数,找到的闭包

参数不匹配的闭包调用:flutter中的函数“ []”

实现闭包的特征会导致绑定/具体的生命周期不匹配

r树状图-groupLabels与实际标签不匹配(包dendextend)

使用特征作为别名中的类型参数的语法

使用 R merge() 收集不匹配的 ID

类型不匹配且特征迭代器作为函数参数

闭包参数上未使用的类型参数

Swift 中的类型别名闭包

使用模式匹配参数的闭包组合 Option<Enum>

在R中的闭包中访问变量

函数参数的特征不匹配

如何在Rust函数签名中使用Fn特征(闭包)?

R包`exams`-不导入R降价

匹配特征上的类型参数

为什么不能在类型别名上使用@autoclosure到函数闭包类型?

Rust函数的返回类型闭包

删除不匹配的主题 R

特征方法中的Rust寿命不匹配

R:使用grep和tm包的部分匹配字典词

如何在 R 中使用 CEM 包找出精确匹配

使用 R 中的 purr 包匹配和分析数据

如何使用R的RecordLinkage包查找记录匹配项?

参数不匹配的闭包调用:函数“ []”错误显示在flutter中