Self::It-6ren">
gpt4 book ai didi

rust - "parameter ` 'a` 从不使用 "error when ' a 在类型参数绑定(bind)中使用

转载 作者:行者123 更新时间:2023-11-29 08:32:37 26 4
gpt4 key购买 nike

use std::iter::Iterator;

trait ListTerm<'a> {
type Iter: Iterator<Item = &'a u32>;
fn iter(&'a self) -> Self::Iter;
}

enum TermValue<'a, LT>
where
LT: ListTerm<'a> + Sized + 'a,
{
Str(LT),
}
error[E0392]: parameter `'a` is never used
--> src/main.rs:8:16
|
8 | enum TermValue<'a, LT>
| ^^ unused type parameter
|
= help: consider removing `'a` or using a marker such as `std::marker::PhantomData`

'a显然正在使用。这是一个错误,还是参数枚举还没有真正完成? rustc --explain E0392建议使用 PhantomData<&'a _> ,但我认为在我的用例中没有任何机会这样做。

最佳答案

'a clearly is being used.

就编译器而言不是。它只关心您的所有通用参数是否在 structenum 主体的某处使用。约束不算在内。

可能想要的是使用更高级别的生命周期边界:

enum TermValue<LT>
where
for<'a> LT: 'a + ListTerm<'a> + Sized,
{
Str(LT),
}

在其他情况下,您可能想要使用 PhantomData 来指示您想要一个类型就好像它使用参数一样:

use std::marker::PhantomData;

struct Thing<'a> {
// Causes the type to function *as though* it has a `&'a ()` field,
// despite not *actually* having one.
_marker: PhantomData<&'a ()>,
}

需要说明的是:您可以枚举中使用PhantomData;把它放在其中一个变体中:

enum TermValue<'a, LT>
where
LT: 'a + ListTerm<'a> + Sized,
{
Str(LT, PhantomData<&'a ()>),
}

关于rust - "parameter ` 'a` 从不使用 "error when ' a 在类型参数绑定(bind)中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50857416/

26 4 0