我无法处理此代码中的错误:
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())
}
如何摆脱它?
答案 0 :(得分:3)
d
是对在同一范围内创建的数据的引用,范围在if cond
的大括号内。当你离开那个范围时,数据就消失了,那么引用d
指向的是什么?这就是你得到错误的原因。您可以将其作为Vec<u8>
归还c
。