I have the following code:
pub struct Canvas<'a> {
width: isize,
height: isize,
color: Color,
surface: Surface,
texture: Texture,
renderer: &'a Renderer,
}
impl<'a> Canvas<'a> {
pub fn new(width: isize, height: isize, renderer: &'a Renderer) -> Canvas<'a> {
let color = Color::RGB(0, 30, 0);
let mut surface = core::create_surface(width, height);
let texture = Canvas::gen_texture(&mut surface, width, height, color, renderer);
Canvas {
width: width,
height: height,
color: color,
surface: surface,
texture: texture,
renderer: renderer,
}
}
pub fn color(&mut self, color: Color) -> &mut Canvas<'a> {
self.color = color;
self.texture = Canvas::gen_texture(
&mut self.surface,
self.width,
self.height,
self.color,
self.renderer,
);
self
}
}
I would like to be able to do this:
let mut canvas = Canvas::new(100, 100, &renderer).color(Color::RGB(80, 230, 80));
I get this error:
error: borrowed value does not live long enough
let mut canvas = Canvas::new(100, 100, &renderer)
Why does the returned Canvas
object not live long enough? If I store the result in an intermediate let
, then it works; why?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…