Цель состоит в том, чтобы предотвратить такой код, когда время жизни бессмысленно указывать явно:
pub fn example<'a>(_val: SomeType<'a>) {}
Вместо этого предпочтительнее использовать '_
:
pub fn example(_val: SomeType<'_>) {}
Если вы развернете свой код и урежете его, вы получите:
use std::fmt;
struct Foo<'a> {
bar: &'a u32,
}
impl<'a> fmt::Debug for Foo<'a> {
fn fmt(&self, _f: &mut fmt::Formatter) -> fmt::Result { Ok(()) }
}
warning: lifetime parameter `'a` only used once
--> src/lib.rs:9:6
|
9 | impl<'a> fmt::Debug for Foo<'a> {
| ^^
|
То есть <'a>
не требуется, но производная добавляет его в любом случае (потому что автоматически генерировать код сложно).
Честно говоря, я не знаю, на что он может рассчитывать, когда код изменится здесь, поскольку вы не можете использовать '_
для общего времени жизни структуры там ...
Как это можно решить?
Я не знаю, что может, без переписывания derive
реализации Debug
.
Смотри также: