generics - 如何声明具有生命周期名称参数化特征绑定(bind)的泛型函数?

标签 generics rust traits lifetime

给定一个通用函数:

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

我想添加一个 serde::Deserialize 特征绑定(bind)。然而以下

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 `(`

我做错了什么?

最佳答案

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

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

正确且有效。

关于generics - 如何声明具有生命周期名称参数化特征绑定(bind)的泛型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53746310/

相关文章:

rust - 有没有办法告诉编译器没有人会为引用泛型类型实现特征?

scala - Scala 中 Universal trait 的用途是什么?

c++ - 如何专门化模板类成员函数?

generics - 如何为所有整数类型创建一个通用的整数到十六进制函数?

scala - 在 akka-http Scala 中将泛型类型注册到 spray-json-support 的正确方法是什么?

c# - 如何通过基类中的方法返回通用类型?

rust - 如何在 Rust 中正确实现 Error::cause?

java - Spring data JPA 如何创建通用规范构建器

rust - 使用 src 文件夹中的模块内部模块

iterator - 如何创建一个无限重复多个值的迭代器?