Как объявить универсальную функцию с границей черты, которая параметризована с именем жизни? - PullRequest
0 голосов
/ 12 декабря 2018

Учитывая обобщенную функцию:

fn foo<T> (_x: T) {}

Я хотел бы добавить границу serde::Deserialize.Однако следующее

fn foo<T: serde::Deserialize> (_x: T) {}

приводит к

error[E0637]: `&` without an explicit lifetime name cannot be used here
 --> src/lib.rs:1:11
  |
1 | fn foo<T: serde::Deserialize> (_x: T) {}
  |           ^^^^^^^^^^^^^^^^^^ explicit lifetime name needed here

И пробует это так, как я понимаю Документация serde относительно времени жизни десериализатора

fn foo<'de, T> where T: serde::Deserialize<'de> (_x: T) {}

также выдает ошибку:

error: expected `(`, found `where`
 --> src/lib.rs:1:16
  |
1 | fn foo<'de, T> where T: serde::Deserialize<'de> (_x: T) {}
  |                ^^^^^ expected `(`

Что я делаю не так?

1 Ответ

0 голосов
/ 12 декабря 2018

О, это была просто базовая ошибка в синтаксисе функции.

fn foo<'de, T>(_x: T)
where
    T: serde::Deserialize<'de>,
{
    // ...
}

правильно и работает.

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