是否可以通过使用列表推导或类似的东西将这样的访问重写为单行?
list[str] nodeNames = [];
visit (ast) {
case someNode(str name): {
nodeNames += name;
}
};
Run Code Online (Sandbox Code Playgroud)
小智 5
是的,您可以使用我们称之为后代匹配运算符的内容/:
[name | /someNode(str name) := ast];
Run Code Online (Sandbox Code Playgroud)
你看这里
[和之间的列表理解].:=,左侧是图案,右侧是主题./someNode(str name),它将匹配表单的每个子节点,someNode(str name)并将绑定模式变量name.整体效果与使用访问的配方相同:收集s中的所有name字段someNode并将其放入列表中.这是您的问题的最短解决方案.