Первый <'a>
объявляет контекст, который вводит переменные, которые универсально определены количественно.Другими словами, impl<'a> ...
означает "реализовать для любое возможное время жизни 'a
...".
Как только переменные введены, вторая 'a
является приложениемпеременная типа.
Синтаксис impl<'a> Config<'a>
можно прочитать как: «для любой возможный время жизни 'a
, эти методы определены для Config<'a>
».
В более сложной ситуации контекст является тем, где вы можете наложить ограничения на параметры.Для жизней это всегда отношения «переживет», например <'a, 'b: 'a
> («для всех жизней 'a
и 'b
, где 'b
переживает 'a
»).Для типов это может включать как черты характера, так и границы времени жизни, например, <'a, T: + Debug + 'a>
(«для всех времен жизни 'a
и всех типов T
, где T
реализует Debug
и не переживает 'a
»).