2016-05-24 6 views
2

リストの理解やそれと同様の方法を使って、このような訪問を1行に書き直すことは可能ですか?さらに短い訪問を書く

list[str] nodeNames = []; 

visit (ast) { 
    case someNode(str name): { 
    nodeNames += name; 
    } 
}; 

答えて

4

はいあなたは私たちが子孫の試合呼んオペレータ/使用することができます:あなたがここに

  • []間のリストの内包を参照してください

    [name | /someNode(str name) := ast]; 
    

    を。

  • 一致演算子:=は、パターンが左側に、件名が右側にあります。
  • 子孫パターン/someNode(str name)は、フォームsomeNode(str name)の各サブノードと一致し、パターン変数nameをバインドします。

全体的な効果は、訪問:name,のすべてのフィールドが収集され、リストに配置された使用と同じです。これはあなたの問題に対する最短の解決方法です。

+0

優秀!ちょうど私が探していたもの。ありがとうございました。 – Nicasso

関連する問題