当前位置: 首页 > 知识库问答 >
问题:

预期的具体寿命,在结构中存储fn时找到绑定的寿命参数

松英叡
2023-03-14

我正在尝试在结构中存储函数:

trait T<'a> {}

struct A {}

struct B<'a> {
    a: &'a A
}

impl<'a> T<'a> for B<'a> {}

fn f1<'a, E: T<'a>>(a: &'a A) {}

struct D {
    f: fn(&A)
}

fn main() {
    let d = D { f: f1::<B> };
}

编译器抱怨:

error[E0308]: mismatched types
  --> src/main.rs:18:20
   |
18 |     let d = D { f: f1::<B> };
   |                    ^^^^^^^ expected concrete lifetime, found bound lifetime parameter 
   |
   = note: expected type `fn(&A)`
   = note:    found type `fn(&A) {f1::<'_, B<'_>>}`

共有1个答案

暨曾笑
2023-03-14

当你写f1::

但是,在D中,f字段应该是一个函数,它接受对a的任何生命周期的引用<代码>f1::

不幸的是,目前还没有办法做到这一点。Rust必须支持更高种类的类型或关联的类型构造函数。然后可以在f1中将E定义为类型构造函数参数,而不是类型参数(尽管我想知道编译器将如何处理'a生存期参数)。

 类似资料:
  • 我无法计算出这段代码的生存期参数。我所尝试的一切通常都会导致编译器错误:“预期的绑定生存期参数,找到了具体的生存期”或者类似于“考虑使用所示的显式生存期参数”(所示的示例没有帮助)或“与trait不兼容的方法”。 、和都是简化版本,以尽量减少此示例。 铁锈游乐场

  • 虽然下面的代码是一个早期的原型,对于我在这个阶段如何实现协议缓冲区不必太认真,但我无法理解rust编译器给我带来的错误消息指的是什么。 src\main。rs:89:9:89:36错误:解决的类型不匹配

  • 我有一个问题与生命周期参数的结构。我不能100%确定如何描述这个问题,但是我创建了一个显示编译时错误的简单案例。 我得到的错误是 我尝试了很多变体,只是无法编译这个东西。我在这里找到了另一个帖子(如何修复:预期的具体寿命,但找到了绑定的寿命参数),但似乎绕过了问题,而不是解决它。我真的不明白为什么这个问题会出现。该 有什么想法吗?谢谢你的帮助。

  • 此代码基于生存期章节中Rust书中的示例代码。我想知道相同方法的以下两个版本有何不同: 对 我猜在第一个版本中,我们指示编译器 > 查找生存期,使两者都 确保返回的引用仅在该生命周期内使用,因为在该生命周期之外,它可能会成为悬空引用。 代码的第二个版本是做什么的?Rust书中的生命周期省略规则之一说,在结构方法中,返回的引用被分配了

  • 问题内容: 我正在使用基于表单的身份验证。 我有一个注销链接,看起来像: 以及相应的注销方法: 点击注销链接后,我返回首页,但似乎没有CSS。当我按下按钮进行搜索时,出现以下错误: 但是CSS实际上位于/ resources下,因为我了解我的web.xml,所以不需要身份验证: 从这种状态来看,我似乎能够再次登录并看到偶尔无法恢复的错误之间的 一些 数据,但是没有CSS。真的有点破。任何建议,将不

  • 我们的系统由许多运行在“干净”机器上的python脚本组成,也就是说,它们需要尽可能少的额外软件。有没有一种方法可以使用OpenTelemetry而不必在这些机器上运行额外的服务器?是否有一种推送模式来发送数据而不是拉送?