13

エラーが発生しました:

extern crate rustc_serialize; // 0.3.24

use rustc_serialize::base64::{self, FromBase64, ToBase64};

fn main() {
    let a: [u8; 30] = [0; 30];
    let b = a.from_base64().unwrap().as_slice();
    println!("{:?}", b);
}

エラー:

error[E0597]: borrowed value does not live long enough
 --> src/main.rs:7:13
  |
7 |     let b = a.from_base64().unwrap().as_slice();
  |             ^^^^^^^^^^^^^^^^^^^^^^^^           - temporary value dropped here while still borrowed
  |             |
  |             temporary value does not live long enough
8 |     println!("{:?}", b);
9 | }
  | - temporary value needs to live until here
  |
  = note: consider using a `let` binding to increase its lifetime

ただし、私にとっては、このコードは間違いではありません。なぜそのエラーが発生するのですか?

4

1 に答える 1

18

ここでの問題は、 の結果をfrom_base64どこにも保存せず、 を呼び出して参照を取得していないことas_sliceです。このように呼び出しを連鎖させると、 の結果がfrom_base64行末でスコープ外になり、取得した参照が無効になります。

extern crate rustc_serialize; // 0.3.24

use rustc_serialize::base64::FromBase64;

fn main() {
    let a: [u8; 30] = [0; 30];
    let b = a.from_base64().unwrap();
    println!("{:?}", b.as_slice());
}
于 2014-10-30T14:42:36.423 に答える