我们可以使这个片段更groovier?
问题描述:
有什么改进,我可以改善这个代码?也许有一些常规的语言功能?这个片段平化的XML文件:节点/节点/节点我们可以使这个片段更groovier?
def root = new XmlParser().parse("src/your_xml.xml")
root.depthFirst().each { n ->
def name = n.name()
while(n?.parent()){
name = "${n?.parent()?.name()}/${name}";
n = n?.parent()
}
println name
}
答
我可能会重构代码以使用更实用的风格。
def x = """
<test>
<test1>
<test2/>
</test1>
<test2>
<test3/>
<test4>
<test5/>
</test4>
</test2>
</test>
""".trim()
def root = new XmlParser().parseText(x)
def nodePath(node) {
node.parent() ? "${nodePath(node.parent())}/${node.name()}" : node.name()
}
root.depthFirst().each {
println nodePath(it)
}
assert nodePath(root.test2[0].test4[0].test5[0]) == "test/test2/test4/test5"
答
- 编辑:不理我了,我错了[看评论](不是最后一行虽然);
我怀疑你可以写(但我可能是错的,我有这个语言没有经验)
while(n = n?.parent()){
但说实话;不要选择那些很酷的东西,去找可读的东西。
+1对“不要用一些很酷的东西去,用一些可读的东西去吧” – quip 2009-09-25 14:55:17
你绝对是对的。我也为可读代码!也许你只是误解了我,我搜索了一些可以使用的常用功能。这可能会使这段代码更具可读性。谢谢:) – codevour 2009-09-28 05:11:12
对于你的代码:这是不可能的,只有一个做,而不是在groovy afaik功能 – codevour 2009-09-28 05:14:49