特殊的Groovy魔法重新属性访问和集合/迭代?
我理解扩展运算符*在这里发生了什么.在Groovy(2.4.3):
[].class.methods*.name => [add,add,remove,get,... 但为什么离开* out会产生相同的结果呢? [].class.methods.name => [add,... 我原本希望将其解释为访问方法返回的java.lang.reflect.Method []的name属性,因此是一个错误.但似乎有效.然后进行了更多的实验,以下内容如下: [*[].class.methods].name => [add,... ([].class.methods.toList()).name => [add,... 因此,似乎尝试访问数组或列表的属性(可能甚至是Iterable)实际上为列表的每个元素返回该属性的列表(如扩展运算符所示). 所以这让我想知道: >这种行为记录在任何地方吗? (我在这里没有看到它例如:http://www.groovy-lang.org/operators.html并且在文档的其他地方没有看到它.) 更新: 似乎是传播*的情况.适用于任何Iterable而不是.仅适用于馆藏.例如: class Foo implements Iterable { public Iterator iterator() { [Long.class,String.class].iterator() } } (new Foo())*.name => [java.lang.Long,java.lang.String] (new Foo()).name => groovy.lang.MissingPropertyException: No such property: name for class: Foo (我想这是一件好事:如果Iterable本身后来获得了一个具有相同名称的属性,代码将开始从Iterable返回该(单个)属性 – 而不是来自元素的list属性值.) 解决方法
这是GPath表达式记录(ish)
here,是的,它只适用于属性. (关于如何在2008年开展工作,有一个旧的
blog post by Ted Naleid here)
对于方法,您需要使用*.或.collect() 另见:Groovy spread-dot operator Better docs link(正如@NathanHughes在下面指出的那样 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |