5

私のエラーとその修正方法を教えてください。

fn get_m() -> Vec<i8> {
    vec![1, 2, 3]
}

fn main() {
    let mut vals = get_m().iter().peekable();
    println!("Saw a {:?}", vals.peek());
}

(遊び場)

コンパイラのエラーは、「letバインディングの使用を検討する」ことを示唆していますが、私はすでに次のようになっています。

error[E0597]: borrowed value does not live long enough
 --> src/main.rs:6:45
  |
6 |     let mut vals = get_m().iter().peekable();
  |                    -------                  ^ temporary value dropped here while still borrowed
  |                    |
  |                    temporary value created here
7 |     println!("Saw a {:?}", vals.peek());
8 | }
  | - temporary value needs to live until here
  |
  = note: consider using a `let` binding to increase its lifetime

これは明らかに初心者の質問です。この時点で十分な Rust を作成したので、借用チェッカーを処理できると思っていましたが、そうではないようです。

この質問は「let」バインディングを使用して値の寿命を延ばすに似ていますが、式を複数のステートメントに分割することは含まれていないため、問題は同じではないと思います。

4

2 に答える 2

5

これは、 によって再参照されている.iter().peekable()内の実際のベクトルで実行しようとしているために発生しています。get_m()vals

基本的に、次のようなものが必要です。

fn get_m() -> Vec<i8> {
    vec![1, 2, 3]
}

fn main() {
    let vals = get_m();
    let mut val = vals.iter().peekable();
    println!("Saw a {:?}", val.peek());
}

(遊び場)

結果:

Saw a Some(1)
于 2015-03-06T06:29:38.353 に答える