鉴于我们有一个如下所示的循环:
for (some a in someArray) {
doSomething
someClassA.set(fieldA, fieldB, fieldC)
doSOmething
}
和
for (some a in someArray) {
doSomething
someClassB.set(fieldX, fieldY, fieldZ)
doSOmething
}
是否有可能不在Groovy中公开2循环块的描述?
换句话说,我可以编写一些能完成工作的单一功能吗?
答案 0 :(得分:1)
您可以使用封装该单行逻辑的闭包并将其传递给循环并执行该块的方法:
def doA = { some -> some.set(fieldA, fieldB, fieldC) }
def doB = { some -> some.set(fieldX, fieldY, fieldZ) }
def doLoop(closure) {
for ( a in someArray) {
doSomething
closure(a)
doSOmething
}
}
doLoop doA
doLoop doB
答案 1 :(得分:0)
Groovy支持duck-typing。这意味着如果你的两个类set-method具有相同的签名,你只需在两个类上调用它:
class A {
String x
}
class B {
String x
}
list = [new A(), new B()]
def loop(def list) {
for (e in list) {
e.setX("myX of ${e.class}")
println e.x
}
}
loop(list)