如何声明具有使用生命周期名称参数化的特征绑定的泛型函数?

时间:2018-12-12 15:29:23

标签: generics rust traits lifetime

给出一个通用函数:

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

尝试以我理解the serde documentation regarding deserializer lifetimes

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 :(得分:3)

哦,这只是函数语法中的一个基本错误。

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

是正确的并且有效。