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

为什么不能满足这种更高种类的、与寿命相关的类型特征?

糜淇
2023-03-14
trait A<'self_>: 'self_ {
    type I;
}
trait AMut
where
    Self: for<'self_> A<'self_>,
    for<'self_> <Self as A<'self_>>::I: 'static,
{
    fn mutate_self(&mut self);
}

fn foo<X>(x: &mut X)
where
    X: 'static + for<'a> A<'a> + AMut,
    for<'a> <X as A<'a>>::I: 'static,
{
    x.mutate_self();
}

操场

此错误与

error[E0280]: the requirement `for<'self_> <Self as A<'self_>>::I: 'static` is not satisfied
  --> src/lib.rs:4:1
   |
4  |   trait AMut
   |   ^     ---- required by a bound in this
   |  _|
   | |
5  | | where
6  | |     Self: for<'self_> A<'self_>,
7  | |     for<'self_> <Self as A<'self_>>::I: 'static,
   | |                                         ------- required by this bound in `AMut`
8  | | {
9  | |     fn mutate_self(&mut self);
10 | | }
   | |_^

error[E0280]: the requirement `for<'self_> <X as A<'self_>>::I: 'static` is not satisfied
  --> src/lib.rs:14:34
   |
4  | trait AMut
   |       ---- required by a bound in this
...
7  |     for<'self_> <Self as A<'self_>>::I: 'static,
   |                                         ------- required by this bound in `AMut`
...
14 |     X: 'static + for<'a> A<'a> + AMut,
   |                                  ^^^^

我本以为第15行的界限会满足第7行的界限。我错过了什么?

共有1个答案

何玺
2023-03-14

你试过这样吗?

trait A<'self_>: 'self_ {
    type I;
}
trait AMut<'a>
where
    Self: A<'a>,
    <Self as A<'a>>::I: 'static,
{
    fn mutate_self(&mut self);
}

fn foo<X>(x: &mut X)
where
    X: 'static + for<'a> A<'a> + for<'a> AMut<'a>,
    for<'a> <X as A<'a>>::I: 'static,
{
    x.mutate_self();
}
 类似资料:
  • 我一直在尝试编写一个程序来实现任意域上的多项式,一种数学结构。我选择了Haskell作为编程语言,我使用了语言扩展。但是,我不明白为什么GHCi不能推导出的约束条件。 在我看来,保证是的实例,这意味着是的实例。所以调用就像调用一样,应该是合理的。此外,我已经编写了作为约束,并且的构造函数具有的形状,因此它还应该知道的类型是的实例。 显然,译员的想法不同。我哪里搞错了?

  • 问题内容: 我试图了解Go的类型转换规则。假设我们有以下接口: 为了满足这些接口,我们有一个类型: 这两个功能正在使用接口: 要使用这些方法,我可以编写以下内容: 第一个功能按预期工作;一个实现所有需求,这是一个功能。 但是,对于第二个函数,Go不会编译尝试的调用,并报告以下内容: 不能在allWoof的参数中将狗([] woofRunner类型)用作[] woofer类型 使用类型转换也是不可能

  • 我正在学习JavaScript及其库jQuery。我不知道为什么允许这种类型的声明(snake.x)而没有“let”或任何东西。这是我的代码

  • 我正在使用Java,我正在尝试调查和学习健康市场科学的sqlBuilder源代码。您可以通过添加此maven依赖项来获取源代码。 文件BaseCreateQuery。类具有以下代码 我想知道这个类型(在第1行)是什么意思。这与Java中的泛型有关吗。我研究了Java中的泛型,但没有找到对这种类型的引用。TypeScript具有ThisType构造。这类似于Java中的这种类型吗?

  • 问题内容: 当我运行下面的代码片段时,它会引发错误 a.test未定义(类型interface {}是没有方法的接口) 看来类型开关没有生效。 如果我将其更改为 没关系 问题答案: 这是规范(强调我的)定义的正常行为: TypeSwitchGuard可以包含一个简短的变量声明。使用该格式时,将在每个子句中隐式块的开头声明变量。 在大小写正好列出一种类型的子句中,变量具有该类型。 否则,变量具有Ty

  • 本文向大家介绍Python的解释器种类以及相关特点?相关面试题,主要包含被问及Python的解释器种类以及相关特点?时的应答技巧和注意事项,需要的朋友参考一下 CPython 是官方版本的解释器:CPython。是使用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。