错误:`var`的寿命不够长

时间:2014-12-02 15:37:41

标签: rust

我无法处理此代码中的错误:

extern crate serialize;

use std::collections::TreeMap;
use serialize::base64;
use serialize::base64::{ToBase64, FromBase64};

fn main() {
  method1(true);
}

fn method1(cond: bool) -> (&'static [u8], String) {
  let ret1 = if cond {
    let a = "a string in base64".as_bytes();
    let b = a.from_base64();
    let c = b.unwrap();
    let d = c.as_slice();
    d  // error: `c` does not live long enough


    // or 
    // "a string in base64".as_bytes().from_base64().unwrap().as_slice() - the same error

   // or
   // static a: &'static [u8] = &[1]; - no error, but that's not what I want
  } else {
    b""
  };

  (ret1, "aaa".to_string())
}

如何摆脱它?

1 个答案:

答案 0 :(得分:3)

d是对在同一范围内创建的数据的引用,范围在if cond的大括号内。当你离开那个范围时,数据就消失了,那么引用d指向的是什么?这就是你得到错误的原因。您可以将其作为Vec<u8>归还c