2015-10-04 3 views
1

Простой код: ClosuresSyntax.groovyПойманный: groovy.lang.MissingMethodException: Нет подписи метода

{ -> item++ } 
{ item -> item++ } 

это вызовет исключение:

Caught: groovy.lang.MissingMethodException: No signature of method: 
     com.lucaslee.groovy.syntax.ClosuresSyntax$_run_closure1.call()  is applicable for argument types: 
(com.lucaslee.groovy.syntax.ClosuresSyntax$_run_closure2) values: 
    [[email protected]]  
+0

Помог ли мой ответ на проблему? Если да, примите это. – Opal

ответ

1

Ваш код такой же, как (обратите внимание на круглые скобки):

{ -> item++}({ item -> item++}) 

Определение обоих замыканий является полностью правильным. Проблема в том, что на самом деле первое замыкание выполняется со вторым, переданным в качестве аргумента. Это точно так же:

{ it -> it() } { println 1 } 

Поскольку вы не можете ссылаться на ++ на Closure объекта MissingMethodException брошен. Это будет работать правильно например .:

{ item -> item()++ }{ 1 } 

Затвор {1} передается в качестве аргумента, вызывается () и результат увеличивается ++.

Чтобы убедиться, что CLOSURES определение корректно, запустите:

def a = { -> item++ } 
def b = { item -> item++ } 
Смежные вопросы