Что означает `single_use_lifetimes` для структуры с производным в функции и как ее решить? - PullRequest
0 голосов
/ 27 августа 2018
#![warn(single_use_lifetimes)]

fn do_foo() {
    #[derive(Debug)]
    struct Foo<'a> {
        bar: &'a u32,
    }
}

приводит к этому предупреждению:

warning: lifetime parameter `'a` only used once
 --> src/lib.rs:6:16
  |
6 |     struct Foo<'a> {
  |                ^^
  |

площадка

Что означает это предупреждение? Как это можно решить?

Это предупреждение не отображается, если не указывать ни производную, ни функцию.

1 Ответ

0 голосов
/ 27 августа 2018

Цель состоит в том, чтобы предотвратить такой код, когда время жизни бессмысленно указывать явно:

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.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...