2016-05-24 9 views
2

Ist es möglich, einen solchen Besuch auf eine einzige Zeile umzuschreiben, indem man ein Listenverständnis oder etwas Ähnliches verwendet?Noch kürzere Besuche schreiben

list[str] nodeNames = []; 

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

Antwort

4

Ja, Sie können mit, was wir die Operator Nachkomme Spiel nennen /:

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

Sie sehen hier

  • eine Liste Verständnis zwischen [ und ].
  • ein Match-Operator := mit einem Muster auf der linken Seite und einem Thema auf der rechten Seite.
  • ein Nachkomme Muster /someNode(str name), die jeden Unterknoten des Formulars someNode(str name) entspricht und Mustervariable name binden wird.

Der Gesamteffekt ist das gleiche wie Ihre Formulierung Besuch mit: alle name Felder aus someNode s werden gesammelt und in einer Liste platziert. Dies ist die kürzest mögliche Lösung für Ihr Problem.

+0

Ausgezeichnet! Genau das, wonach ich gesucht habe. Vielen Dank. – Nicasso