2016-11-12 37 views
2

在使用調車碼算法將中綴表達式轉換爲後綴的情況下。我想使用一個向量來存儲輸出,它將存儲運算符和數字類型的數據。向量存儲Rust中的混合類型數據

#[derive(Clone, Copy, Debug, PartialEq)] 
pub enum Operator { 
    Add, 
    Sub, 
    Mul, 
    Div, 
} 

fn main() { 
    let mut output: Vec<String> = Vec::new(); // create an output vector 
    let a = 2; 
    let b = Operator::Add; 
    let c = 3; 
    output.push(a.to_string()); 
    output.push(b.to_string()); 
    output.push(c.to_string()); 
} 

這上面當然代碼不編譯,由於to_string()方法沒有用於Operator定義。我看到兩種方法來解決這個問題:

  1. 定義to_string()方法
  2. 創建一個向量來存儲數字和Operator引用。

我認爲第二個是首選,但我不知道創建引用向量是否會引入很多複雜性。

回答

7

沒有必要使用引用;帶他們出來的時候

enum Thing { 
    Op(Operator), 
    Number(i32), 
} 

fn main() { 
    let mut output: Vec<Thing> = Vec::new(); 
    let a = 2; 
    let b = Operator::Add; 
    let c = 3; 
    output.push(Thing::Number(a)); 
    output.push(Thing::Op(b)); 
    output.push(Thing::Number(c)); 
} 
他們

然後match:只儲存數量和Operator小號直接在一個枚舉。

+0

我明白了。由於枚舉的大小相同。非常感謝! – enaJ