2016-04-24 3 views
0

私はRustを初めて使っています。私のコードは以下の通りです:エラー:非スカラーキャスト: `core :: option :: Option <i32>` as usize

use std::*; 

fn DFS(A: i32, grid: &mut [[i32; 500]; 500], visited: &mut [i32; 500]) -> (usize, usize) { 
    let mut s = Vec::new(); 
    s.push(A); 
    visited[A as usize] = 1; 
    let mut flag; 
    let mut max_height = 0; 
    let mut ans_vertex: usize = A as usize; 
    let mut x; 

    'outer: while let Some(top) = s.pop() { 
     s.push(top); 
     x = top as usize; 

     flag = 0; 
     'inner: for i in 1..500 { 
      if visited[grid[x][i] as usize] == 0 && grid[x][i] != 0 { 
       flag = 1; 
       s.push(grid[x][i]); 
       visited[grid[x][i] as usize] = 1; 
       break 'outer; 
      } 
     } 
     if s.len() > max_height { 
      max_height = s.len(); 
      ans_vertex = s.pop() as usize; 
     } 
     if flag != 0 { 
      s.pop(); 
     } 
    } 
    println!("{}, {}", ans_vertex, max_height); 
    return (ans_vertex, max_height); 
} 

fn fc(grid: &mut [[i32; 500]; 500]) { 
    for i in 1..500 { 
     for j in 1..500 { 
      grid[i][j] = 0; 
     } 
    } 

    grid[1][2] = 1; 
    grid[2][1] = 1; 
    grid[2][3] = 1; 
    grid[3][2] = 1; 
    grid[3][4] = 1; 
    grid[4][3] = 1; 
} 

fn main() { 
    let mut visited: [i32; 500] = [0; 500]; 
    let mut grid: [[i32; 500]; 500] = [[0; 500]; 500]; 

    fc(&mut grid); 
    let B = DFS(1, &mut grid, &mut visited); 
    println!("{}", B.0); 
} 

私はすでにu32および他のタイプにusizeを変更しようとしたが、私は何も結果が届きません。私はrustc newdia.rsを実行すると、それは示していますVecとが空の場合は、ポップする現在何の価値がありませんので

newdia.rs:26:17: 26:33 error: non-scalar cast: `core::option::Option<i32>` as `usize` 
    newdia.rs:26   ans_vertex = s.pop() as usize; 
           ^~~~~~~~~~~~~~~~ 
    error: aborting due to previous error 

答えて

0

Vec::pop()Option<T>を返します。 Vec::pop()に電話する前にVecに最低1の値が含まれていることがわかっている場合はOption::unwrap()を使用して、をi32に変換します(Vecが空だったためVec::popが返された場合はパニック)。異なっmatchまたはif letを使用して

あなたはまた、ケースを処理するために選択することができます
ans_vertex = s.pop().unwrap() as usize; 

if let Some(popped) = s.pop() { 
    // Successfully popped `popped`. `popped` here is an i32. 
} else { 
    // `s` was empty. 
} 
+0

グレート!ありがとう。しあわせでいる – singh