如何在Rust中创建具有需要生命周期特征的泛型函数?

字词

我正在尝试编写一个特征,该特征可与数据库一起使用并表示可以存储的东西。为此,特质是从包括serde::Deserialize特质在内的其他特征继承而来的

trait Storable<'de>: Serialize + Deserialize<'de> {
    fn global_id() -> &'static [u8];
    fn instance_id(&self) -> Vec<u8>;
}

struct Example {
    a: u8,
    b: u8
}

impl<'de> Storable<'de> for Example {
    fn global_id() -> &'static [u8] { b"p" }
    fn instance_id(&self) -> Vec<u8> { vec![self.a, self.b] }
}

接下来,我尝试使用泛型函数编写此数据:

pub fn put<'de, S: Storable>(&mut self, obj: &'de S) -> Result<(), String> {
    ...
    let value = bincode::serialize(obj, bincode::Infinite);
    ...
    db.put(key, value).map_err(|e| e.to_string())
}

但是,我收到以下错误:

error[E0106]: missing lifetime specifier
--> src/database.rs:180:24
    |
180 |     pub fn put<'de, S: Storable>(&mut self, obj: &'de S) -> Result<(), String> {
    |                        ^^^^^^^^ expected lifetime parameter

在操场上的最小例子。

我该如何解决,可能完全避免呢?

Shepmaster

您已Storable使用通用参数(在这种情况下为生命周期)进行了定义。这意味着必须在整个应用程序中传播通用参数:

fn put<'de, S: Storable<'de>>(obj: &'de S) -> Result<(), String> { /* ... */ }

您还可以决定使泛型特定。可以使用具体的类型或生存期(例如'static),也可以将其放在特征对象的后面。

Serde还提供了有关解串器寿命的综合页面它提到您也可以选择使用DeserializeOwned

trait Storable: Serialize + DeserializeOwned { /* ... */ }

您也可以使用与DeserializeOwned自己的特征相同的概念

trait StorableOwned: for<'de> Storable<'de> { }

fn put<'de, S: StorableOwned>(obj: &'de S) -> Result<(), String> {

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

如何在 Rust 中为具有生命周期的结构实现显示特征?

来自分类Dev

如何对具有生命周期的结构实施“具有静态生命周期的特征”?

来自分类Dev

如果在函数内创建引用,如何将泛型类型与需要使用生命周期参数的特征绑定在一起?

来自分类Dev

为什么泛型函数不需要生命周期

来自分类Dev

在 Rust 中,如何将具有生命周期的对象推送到向量中?

来自分类Dev

为什么在 Rust 中 [有时] 不需要泛型的生命周期说明符?

来自分类Dev

从具有生命周期的结构转换为特征

来自分类Dev

如何通过生命周期实现的特征传递函数?

来自分类Dev

为什么在这个 Rust 函数输出中需要一个明确的生命周期?

来自分类Dev

rust-具有特征的泛型函数的返回类型

来自分类Dev

将泛型类型绑定到需要生命周期的特征时未使用的类型参数

来自分类Dev

使用特征和泛型函数在rust中重载函数是否有不利之处?

来自分类Dev

为什么这种相互引用结构在具有指定生命周期的 Rust 中工作?

来自分类Dev

如何在Rust结构中正确使用生命周期

来自分类Dev

Azure函数是否具有“启动”生命周期方法?

来自分类Dev

在使用生命周期参数的函数调用中如何处理结构参数的生命周期?

来自分类Dev

如何在py_class中使用生命周期!在rust-cpython中?

来自分类Dev

如何在Kotlin中创建泛型函数

来自分类Javascript

如何在TS和TypeORM中创建泛型函数?

来自分类Dev

DDD:在单个事务中创建具有共享生命周期的多个聚合

来自分类Dev

如何表达闭包的生命周期限制以匹配特征有界生命周期?

来自分类Dev

如何在泛型函数类型中具有可选参数类型?

来自分类Dev

Rust中功能参考的生命周期

来自分类Dev

异步流中的生命周期 (rust)

来自分类Dev

Rust:意思是“由于需求冲突,无法为函数调用中的生命周期参数推断合适的生命周期”

来自分类Dev

如何在Android的生命周期感知协程范围中返回函数值?

来自分类Dev

生命周期参数和借用如何在函数签名中相互作用

来自分类Dev

如何定义适配器特征,其中某些实现需要 &self 的生命周期?

Related 相关文章

  1. 1

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

  2. 2

    如何在 Rust 中为具有生命周期的结构实现显示特征?

  3. 3

    如何对具有生命周期的结构实施“具有静态生命周期的特征”?

  4. 4

    如果在函数内创建引用,如何将泛型类型与需要使用生命周期参数的特征绑定在一起?

  5. 5

    为什么泛型函数不需要生命周期

  6. 6

    在 Rust 中,如何将具有生命周期的对象推送到向量中?

  7. 7

    为什么在 Rust 中 [有时] 不需要泛型的生命周期说明符?

  8. 8

    从具有生命周期的结构转换为特征

  9. 9

    如何通过生命周期实现的特征传递函数?

  10. 10

    为什么在这个 Rust 函数输出中需要一个明确的生命周期?

  11. 11

    rust-具有特征的泛型函数的返回类型

  12. 12

    将泛型类型绑定到需要生命周期的特征时未使用的类型参数

  13. 13

    使用特征和泛型函数在rust中重载函数是否有不利之处?

  14. 14

    为什么这种相互引用结构在具有指定生命周期的 Rust 中工作?

  15. 15

    如何在Rust结构中正确使用生命周期

  16. 16

    Azure函数是否具有“启动”生命周期方法?

  17. 17

    在使用生命周期参数的函数调用中如何处理结构参数的生命周期?

  18. 18

    如何在py_class中使用生命周期!在rust-cpython中?

  19. 19

    如何在Kotlin中创建泛型函数

  20. 20

    如何在TS和TypeORM中创建泛型函数?

  21. 21

    DDD:在单个事务中创建具有共享生命周期的多个聚合

  22. 22

    如何表达闭包的生命周期限制以匹配特征有界生命周期?

  23. 23

    如何在泛型函数类型中具有可选参数类型?

  24. 24

    Rust中功能参考的生命周期

  25. 25

    异步流中的生命周期 (rust)

  26. 26

    Rust:意思是“由于需求冲突,无法为函数调用中的生命周期参数推断合适的生命周期”

  27. 27

    如何在Android的生命周期感知协程范围中返回函数值?

  28. 28

    生命周期参数和借用如何在函数签名中相互作用

  29. 29

    如何定义适配器特征,其中某些实现需要 &self 的生命周期?

热门标签

归档