Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与#x27之间的差异@价值';和Groovy中的值_Groovy - Fatal编程技术网

与#x27之间的差异@价值';和Groovy中的值

与#x27之间的差异@价值';和Groovy中的值,groovy,Groovy,我看到一个属性被以不同的方式访问,如'@value'和'@value'。有什么区别 你在这里到底做了什么?你在哪里看到了o.@value' 调用o.@value将忽略对象中的getter,并直接获取value属性 因此,调用o.@value'将得到一个名为@value的属性(在Groovy中,它不是类的有效属性名) 从示例中编辑 啊,对,这是一个解释得很糟糕的例子。当slurping xml时,@attr表单是一个特殊表单,它将访问节点的属性 现在,groovy允许您执行以下操作: def a

我看到一个属性被以不同的方式访问,如'@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]]
正如您在第二个
断言中所看到的,我们没有扩展点操作符
*。
,但它仍然可以工作并对列表中的每个元素调用
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结果时会有所不同