我看到一个属性以不同的方式被访问,例如 .'@value' 和 .@value。有什么不同?
到底是什么报价在这里?
你在哪里见过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]]
正如您在第二个中看到的那样assert
,我们没有展开点运算符*.
,但它仍然可以工作并调用getBytes
列表中的每个元素。
使用您链接到的 xml 示例,它正在执行以下操作:
records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.'@make'
所以它在列表中的每个项目上调用“make”属性。如果没有引号:
records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.@make
它会尝试获取make
ArrayList 的属性(显然不存在)。
我想说一种不那么令人困惑的写作方式是:
records.car.findAll{ it.country.text() =~ '.*s.*a.*' }*.@make
因为这使发生的事情更加明显......