我看到以不同方式访问的属性为。'@ value'和。@ value。有什么不同?
这里究竟引用了什么?
答案 0 :(得分:3)
你在哪里见过o.'@value'
?
调用o.@value
会忽略对象中的getter并直接获取value
属性。
因此调用o.'@value'
将获得一个名为@value
的属性(在Groovy中,该属性不是类的有效属性名称)
啊,对,这是一个解释不清的例子。当啜饮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
。 / p>
在您链接到the xml example时,它正在执行:
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
因为这使得事情变得更加明显......