关于 rust:如何使用泛型字段修复”从不使用生命周期参数”?

How do I fix "lifetime parameter is never used" with a generic field?

本问题已经有最佳答案,请猛点这里访问。

以下代码会产生错误:

1
2
3
4
5
6
7
struct IntParseVisitor<'de, V: Visitor<'de>> {
    inner_visitor: V,
}

pub trait Visitor<'de>: Sized {
    fn visit_str<E>(self, v: &'de str) {}
}
1
2
3
4
5
6
7
error[E0392]: parameter `'de` is never used
 --> src/lib.rs:1:24
  |
1 | struct IntParseVisitor<'de, V: Visitor<'de>> {
  |                        ^^^ unused parameter
  |
  = help: consider removing `'de`, referring to it in a field, or using a marker such as `std::marker::PhantomData`

我不太明白它是如何被使用的。它不用于 Visitor<'de> 吗?解决此问题的最佳方法是什么?请注意,我无法更改 Visitor 的代码,因为它位于 Serde.


啊,感谢@Shepmaster\\ 的提示,我尝试了这个,它编译:

1
2
3
4
5
6
7
8
9
struct IntParseVisitor<V: for<'de> Visitor<'de>> {
    inner_visitor: V,
}

pub trait Visitor<'de>: Sized {
    fn visit_str<E>(self, v: &'de str)
    {
    }
}

我不完全了解这里的生命,所以不要相信我的话。


您可以按照错误提示进行操作:

help: consider removing 'de, referring to it in a field, or using a marker such as std::marker::PhantomData

1
2
3
4
struct IntParseVisitor<'de, V: Visitor<'de>> {
    inner_visitor: V,
    _phantom_data: std::marker::PhantomData<&'de ()>,
}