2014-03-19 11 views
0

召集組的方法對象上我有一個類叫做Test和我下面的代碼使用閉

def test = new Test() 
test.method1(args) 
test.method2(args) 

等。我希望這樣的事情可以完成,我可以在閉包中通過test對象的所有方法調用,並使其工作。像

test { 
    method1(args) 
    method2(args) 
} 

在groovy中可以這麼做嗎?

回答

5

是的,這是可能的with Groovy:在

test.with { 
    method1 args 
    method2 args 
} 
0

的Groovy將讓你call a method using a GString到位標識的,所以如果你想只具有方法名稱的集合調用對象,你可以在這樣做:

def doTest(final object, final methods, final args) { 
    methods.each { object."$it"(*args) } 
} 

final test = new Object() { 
    void method1(final... args) { println "method1 $args" } 
    void method2(final... args) { println "method2 $args" } 
    void method3(final... args) { println "method3 $args" } 
} 

doTest test, [ 'method1', 'method2' ], [ 1, 2, 3 ] 

而且Groovy中有passing maps to a function這可能是得心應手這裏一些語法糖。如果你沒有真正想調用的每個方法使用相同的參數,你可以這樣做:

def doTest(final Map methods, final object) { 
    methods.each { object."$it.key"(*it.value) } 
} 

doTest test, method1: [ 1, 2, 3 ], method2: [ 4, 5, 6 ] 

我可以看到這樣的事情,如果你從一個CSV文件獲取方法的名稱和值是有用的或一些類似的外部來源。