2017-08-29 4 views
2

私はVecの中でVec<f64>を使って作られた行列の上にループを作って、その要素を一つずつ変更しようとしています。ベクトルコンテンツの変更を許可するためにこれら2つのループを修正するにはどうすればよいですか?

私はそれを動作させるように見えません。私は、コンパイラのヒント、mut &.iter()または.iter_mut()の様々な組み合わせが、のどれを次試してみました

error[E0308]: mismatched types 
    --> src/main.rs:19:17 
    | 
19 |    q = rng.gen::<f64>(); 
    |     ^^^^^^^^^^^^^^^^ expected &mut f64, found f64 
    | 
    = note: expected type `&mut f64` 
       found type `f64` 
    = help: try with `&mut rng.gen::<f64>()` 

:私は、コンパイラはこれを言う...まだ

extern crate rand; 

use std::ptr; 
use std::mem; 

use rand::Rng; 

fn main() { 
    let mut rng = rand::thread_rng(); 
    let mut v: Vec<Vec<f64>> = Vec::new(); 
    v.push(vec![0f64; 35]); 
    v.push(vec![0f64; 35]); 
    v.push(vec![0f64; 35]); 
    v.push(vec![0f64; 35]); 

    let len = v.len(); 
    for &el in &v { 
     for q in &mut el { 
      q = rng.gen::<f64>(); 
      println!("{}", q); 
     } 
     println!("{:?}", el); 
    } 
    println!("float: {}", rng.gen::<f64>()); 
    //println!("vec: {:?}, len: {}",v,len); 
} 

構文についてあまりにも混乱しています彼らは働いた。いくつかの不満の後、私は解決策のための私の検索がモンテカルロアルゴリズムになっていたことに気付きました。

答えて

5

エラーメッセージを読む - 静的な型指定言語の大きな利点ですが、実際にはのように見えます。が表示されます。

--> src/main.rs:19:17 
    | 
19 |    q = rng.gen::<f64>(); 
    |     ^^^^^^^^^^^^^^^^ expected &mut f64, found f64 
    | 
    = note: expected type `&mut f64` 
       found type `f64` 
    = help: try with `&mut rng.gen::<f64>()` 

残念ながら、ここの「ヘルプ」は正しいパスではありませんが、コンパイラからの推測に過ぎません。

タイプf64のランダム値を作成し、&mut f64を保持する変数に割り当てようとしています。これらは異なるタイプなので、エラーが発生します。

extern crate rand; 

use rand::Rng; 

fn main() { 
    let mut rng = rand::thread_rng(); 

    let mut v = vec![ 
     vec![0f64; 35], 
     vec![0f64; 35], 
     vec![0f64; 35], 
     vec![0f64; 35], 
    ]; 

    for el in &mut v { 
     for q in el { 
      *q = rng.gen::<f64>(); 
     } 
    } 

    println!("vec: {:?}", v); 
} 

私はおそらくかかわらず、何かをゼロ初期化、および

let mut rng = rand::thread_rng(); 

let v: Vec<Vec<f64>> = (0..4) 
    .map(|_| (0..35).map(|_| rng.gen()).collect()) 
    .collect(); 

println!("vec: {:?}", v); 
+0

はそんなにありがとうとしてそれを記述していないと思います:あなたはそれに格納する変数間接参照する必要が

、両方のコードを再構築し、問題を説明するために!私はできるだけ早く受け入れます。 vecを作成する関数型プログラミングの方法に感謝します!もし私ができるなら、私は2つの+1を与えるだろう! –

関連する問題