在声明struct字段对象类型时,我必须使用什么类型的生命周期参数

时间:2016-08-24 15:17:35

标签: struct rust lifetime

这就是我的代码。我正在尝试在ShapeRenderer结构中使用一个implementsd结构并使用它的方法。

shapes.rs:

use super::core::*;

pub struct ShapeRenderer<'a> {
    core_renderer: &'a mut CanvasRenderer,
}

core.rs

pub struct Canvas {
    pub width: usize,
    pub height: usize,
    pub array: Vec<char>,
}

pub struct Point {
    pub x: usize,
    pub y: usize,
}

pub struct CanvasRenderer<'a> {
    canvas: &'a mut Canvas,
}

impl<'a> CanvasRenderer<'a> {
    pub fn new(canvas: &'a mut Canvas) -> CanvasRenderer {
        CanvasRenderer { canvas: canvas }
    }
}

错误

error[E0107]: wrong number of lifetime parameters: expected 1, found 0
 --> src/shapes.rs:5:28
  |
5 |     core_renderer: &'a mut CanvasRenderer
  |                            ^^^^^^^^^^^^^^ expected 1 lifetime parameter

我用一个生命周期参数标记它 - 为什么它需要另一个?尝试使用<'a>对象类型并附加<'a> - 这些尝试都没有解决问题。

1 个答案:

答案 0 :(得分:4)

CanvasRenderer在生命周期内进行参数化,因此您需要说明生命周期是什么:

pub struct ShapeRenderer<'a> {
    core_renderer: &'a mut CanvasRenderer<'a>,
    //                                   ^^^^
}

然而,这种结构似乎没有多大用处,它只增加了间接性。为什么要引用只有引用的东西?跳过中间人:

pub struct ShapeRenderer<'a> {
    core_renderer: CanvasRenderer<'a>,
}