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?