"заимствованное значение не достаточно долгое время" при использовании as_slice()

Я столкнулся с ошибкой:

extern crate serialize;

use serialize::base64::{mod, ToBase64, FromBase64};

fn main() {

  let a: [u8, ..30] = [123, 34, .....];
  let b = a.from_base64().as_slice();
  println!("{}", b);
}

Ошибка:

error: borrowed value does not live long enough
let b = a.from_base64().as_slice();

Для меня код, однако, не ошибается. Почему у меня такая ошибка?

Ответ 1

Проблема заключается в том, что вы не сохраняете результат from_base64 в любом месте, а затем ссылаетесь на это, вызывая as_slice. Таким образом, вызывающие вызовы приводят к тому, что результат from_base64 выходит из области видимости в конце строки, и выбор ссылки больше не действителен.

Также будьте осторожны при вызове as_slice на Result, потому что в случае ошибки декодирования он будет паниковать и сбой программы.

extern crate serialize;

use serialize::base64::{mod, ToBase64, FromBase64};

fn main() {

  let a: [u8, ..30] = [123, 34, .....];
  let b = a.from_base64();
  println!("{}", b.as_slice());
  // <-- b (result of from_base64) lifetime now ends here
}