与#x27之间的差异@价值';和Groovy中的值
我看到一个属性被以不同的方式访问,如'@value'和'@value'。有什么区别与#x27之间的差异@价值';和Groovy中的值,groovy,Groovy,我看到一个属性被以不同的方式访问,如'@value'和'@value'。有什么区别 你在这里到底做了什么?你在哪里看到了o.@value' 调用o.@value将忽略对象中的getter,并直接获取value属性 因此,调用o.@value'将得到一个名为@value的属性(在Groovy中,它不是类的有效属性名) 从示例中编辑 啊,对,这是一个解释得很糟糕的例子。当slurping xml时,@attr表单是一个特殊表单,它将访问节点的属性 现在,groovy允许您执行以下操作: def a
你在这里到底做了什么?你在哪里看到了
o.@value'
调用o.@value
将忽略对象中的getter,并直接获取value
属性
因此,调用o.@value'
将得到一个名为@value
的属性(在Groovy中,它不是类的有效属性名)
从示例中编辑
啊,对,这是一个解释得很糟糕的例子。当slurping xml时,@attr
表单是一个特殊表单,它将访问节点的属性
现在,groovy允许您执行以下操作:
def a = [ 'a', 'b', 'c' ]
// Will call getBytes() on every string in the list
assert a*.bytes == [[97], [98], [99]]
// So will this!
assert a.bytes == [[97], [98], [99]]
正如您在第二个断言中所看到的,我们没有扩展点操作符*。
,但它仍然可以工作并对列表中的每个元素调用getBytes
有了您的链接,它将执行以下操作:
records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.'@make'
因此,它对列表中的每个项目调用“make”属性。如果没有引号:
records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.@make
它将尝试获取ArrayList的make
属性(该属性显然不存在)
我想说一种不那么混乱的写作方式是:
records.car.findAll{ it.country.text() =~ '.*s.*a.*' }*.@make
因为这让事情变得更加明显……你能看看这个吗。它指的是像firstRecord这样的道具。'@make'@iCode更新了我的答案…希望有意义;-)非常感谢你的回答。那么“@XX”等同于*.XX?!这似乎很奇怪。我的意思是,根据你最初的命令,调用o.“@XX”将得到一个名为@XX的属性,但这里不是这样的?!那么哪一个是正确的呢?XmlSlurper
和XmlParser
分别返回groovy.util.slurpersupport.NodeChild
和groovy.util.Node
。对这些类调用@attr
将获得xml节点的属性。对常规对象调用@attr
会绕过getter并返回属性值。使用XmlSlurped或XmlParsed结果时会有所不同