2016-11-12 14 views
2

Shunting-yardアルゴリズムを使用して、中置式を後置式に変換するコンテキストで使用します。私はベクトルを使用して演算子と数値型のデータを格納する出力を格納したいと考えています。 to_string()方法はOperatorに定義されていないのでベクトルは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()); 
} 

勿論この上記のコードは、コンパイルされません。

  1. 番号とOperatorへの参照を格納するためのベクトルを作成しto_string()方法
  2. を定義します。私はそれを修正するには、次の2つの方法が表示されます。

参考文献のベクトルを作成すると複雑さが増すかどうかはわかりませんが、2番目が好ましい選択肢だと思います。

答えて

7

参照を使用する必要はありません。ただ列挙型で直接数字とOperator秒を格納します。それらの

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をそれらを取り出すとき。

+0

を参照してください。列挙型は同じサイズです。本当にありがとう! – enaJ

関連する問題