结构中 FnMut 字段的参数的生命周期是什么?

我有以下代码:

struct Callable<P> {
    callable: Box<FnMut(&P)>,
}

struct Parameters<'a> {
    text: &'a str,
}

struct Context<'a> {
    call: Callable<Parameters<'a>>,
}

Callable是可以通过引用类型参数来调用的东西P

Parameters包含对字符串的引用,所以它有一个通用的生命周期参数是完全合理的。它基本上是说该text领域应该至少与Parameters它本身一样长

我也必须为它添加一个通用的生命周期参数Context,否则我不能用于call成员类型。这对我来说没有任何意义,因为该'a参数与Context.

我怀疑该for <'a>构造可以以某种方式使用,我只是不知道把它放在哪里。

弗朗西斯·加涅

for<'a>只能用于 trait bounds 和 trait 对象;Parameters<'a>不是特征。

解决方案是目前正在开发的一个特性:泛型关联类型泛型关联类型可以被认为是对类型进行操作的函数(即给定一个或多个类型/生命周期,产生另一种类型)。你的程序看起来像这样:

#![feature(generic_associated_types)]

trait CallableParameterFamily {
    type Type<'a>;
}

struct Callable<P>
where
    P: CallableParameterFamily,
{
    callable: Box<for<'a> FnMut(&P::Type<'a>)>,
}

struct Parameters<'a> {
    text: &'a str,
}

enum ParametersFamily {}
impl CallableParameterFamily for ParametersFamily {
    type Type<'a> = Parameters<'a>; // given 'a, produce Parameters<'a>
}

struct Context {
    call: Callable<ParametersFamily>,
}

(从 Rust 1.25.0-nightly (2018-02-14 3ec5a99aaa0084d97a9e845b34fdf03d1462c475) 开始,该功能似乎已部分实现,上面的代码不起作用,所以我无法验证它是否正确或者我是否在这里犯了错误.)

这里的关键是我们不想要Callable<Parameters<'a>>具有特定生命周期的'a,因为我们可能希望'a每次调用具有不同生命周期的闭包我们不能将类型构造函数(例如Parameters)作为类型参数传递给泛型类型(例如Pon Callable)。

泛型关联类型将允许以间接方式实现这一点:我们必须定义具有泛型关联类型(此处CallableParameterFamily为 GAT Type)的特征以及实现该特征的类型(此处为ParametersFamily)。请注意,ParametersFamily它没有生命周期参数。然后我们将Callable<ParametersFamily>其用作 中call字段的类型ContextContext不再需要生命周期参数。然后,在 中Callable,不是P直接使用,而是P::Type<'a>在引入'ausing使用for<'a>当实例化为 时Callable<ParametersFamily>P::Type<'a>将扩展为Parameters<'a>,这正是我们想要的。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

生命周期参数化的结构上的方法的正确类型是什么?

来自分类Dev

SwiftUI中@State变量的生命周期是什么?

来自分类Dev

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

来自分类Dev

在Rust中对结构使用生命周期的正确方法是什么?

来自分类Dev

C ++中函数参数的生命周期

来自分类Dev

结构中可变元素的生命周期

来自分类Dev

Apache Apex中的运算符生命周期是什么?

来自分类Dev

ObservableOnSubscribe 回调中侦听器的生命周期是什么 - Rxjava

来自分类Dev

在 TabLayout 中的 Tabs 之间切换时,tabs 的生命周期是什么

来自分类Dev

尝试了解 IoC(使用 Autofac)中的生命周期范围是什么意思?

来自分类Dev

函数vs结构的类型参数(生命周期问题)

来自分类Dev

Kotlin中构造函数参数的生命周期

来自分类Dev

Kotlin中构造函数参数的生命周期

来自分类Dev

Kotlin中构造函数参数的生命周期

来自分类Dev

Rust 中闭包参数的生命周期问题

来自分类Dev

iOS中的活动生命周期相当于什么?

来自分类Dev

什么是Hibernate中的集合元素生命周期

来自分类Dev

什么是“对象生命周期管理”中的“活动对象”?

来自分类Dev

MvvmCross中的生命周期

来自分类Dev

声明结构封闭的生命周期

来自分类Dev

结构与枚举生命周期的差异

来自分类Dev

闭包的 const 数组对 Rust 中具有生命周期参数的结构进行可变引用

来自分类Dev

视图控制器生命周期和iOS中的视图生命周期有什么区别?

来自分类Dev

遍历并调用FnMut向量中的闭包

来自分类Dev

遍历并调用FnMut向量中的闭包

来自分类Dev

为什么结构中的切片需要使用生命周期,但不需要向量?

来自分类Dev

为什么Fn源自FnMut(源自FnOnce)?

来自分类Dev

使用参考返回结构的Vec时,生命周期参数数量错误

来自分类Dev

Vaadin中布局(或组件)的生命周期?

Related 相关文章

  1. 1

    生命周期参数化的结构上的方法的正确类型是什么?

  2. 2

    SwiftUI中@State变量的生命周期是什么?

  3. 3

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

  4. 4

    在Rust中对结构使用生命周期的正确方法是什么?

  5. 5

    C ++中函数参数的生命周期

  6. 6

    结构中可变元素的生命周期

  7. 7

    Apache Apex中的运算符生命周期是什么?

  8. 8

    ObservableOnSubscribe 回调中侦听器的生命周期是什么 - Rxjava

  9. 9

    在 TabLayout 中的 Tabs 之间切换时,tabs 的生命周期是什么

  10. 10

    尝试了解 IoC(使用 Autofac)中的生命周期范围是什么意思?

  11. 11

    函数vs结构的类型参数(生命周期问题)

  12. 12

    Kotlin中构造函数参数的生命周期

  13. 13

    Kotlin中构造函数参数的生命周期

  14. 14

    Kotlin中构造函数参数的生命周期

  15. 15

    Rust 中闭包参数的生命周期问题

  16. 16

    iOS中的活动生命周期相当于什么?

  17. 17

    什么是Hibernate中的集合元素生命周期

  18. 18

    什么是“对象生命周期管理”中的“活动对象”?

  19. 19

    MvvmCross中的生命周期

  20. 20

    声明结构封闭的生命周期

  21. 21

    结构与枚举生命周期的差异

  22. 22

    闭包的 const 数组对 Rust 中具有生命周期参数的结构进行可变引用

  23. 23

    视图控制器生命周期和iOS中的视图生命周期有什么区别?

  24. 24

    遍历并调用FnMut向量中的闭包

  25. 25

    遍历并调用FnMut向量中的闭包

  26. 26

    为什么结构中的切片需要使用生命周期,但不需要向量?

  27. 27

    为什么Fn源自FnMut(源自FnOnce)?

  28. 28

    使用参考返回结构的Vec时,生命周期参数数量错误

  29. 29

    Vaadin中布局(或组件)的生命周期?

热门标签

归档