Groovy 使用 getter 方法进行元编程

Groovy Meta Programming with getter method

有人能帮我弄清楚为什么这个添加的 "get" 方法适用于一个 class(String) 但不适用于另一个 class(Node) 吗?

String.metaClass.getFoo = { "string foo" }
s = "test"
println s.foo // WORKS: get "string foo"

Node.metaClass.getFoo = { "node foo" }
xml = "<test><body>test</body></test>"
nodes = new XmlParser().parseText(xml)
println nodes.foo // NOT WORK: gets []

如何使调用 "foo" 的结果与 class 节点的 getFoo() 相同?

nodes.foo 将尝试在已解析的节点树中查找元素。直接使用 getFoo() 将是唯一的选择 AFAIK。