少しはまったのでメモ。
Groovyでは、コレクション内のインスタンスが同一のフィールドを持っていた場合、(コレクション).(フィールド)
でアクセスできる。下の例のように、collect
の簡易表現になりうる。
inner.groovy
class A {
List inner = []
}
class B {
List inner = []
Map inner_map = [:]
}
class C {
List different_inner = []
}
def a1 = new A()
def a2 = new A()
def b1 = new B()
def c1 = new C()
a1.inner.add(1)
a1.inner.add(2)
a2.inner.add(3)
a2.inner.add(4)
b1.inner.add(5)
c1.different_inner.add(6)
def outer = [a1, a2, b1]
println(outer.inner)
// >> [[1, 2], [3, 4], [5]]
// 同一表現?
println(outer.collect {
it.inner
})
// >> [[1, 2], [3, 4], [5]]
outer.add(c1)
println(outer.inner)
// >> groovy.lang.MissingPropertyException