Как задать тип Groovy Closure - PullRequest
1 голос
/ 20 мая 2019

Я знаю, что у замыканий есть неявный тип 'it', так что мы можем определить функцию

def int foo(int num, Closure closure){
  def sum = num
   sum+=closure.call(1)
}

, затем я вызываю эту функцию как

def total = foo(1,{it+1})
print total
//prints 2

Мой вопрос: как заставитьзамыкание для принятия явного параметра типа int.Например, как мы можем определить лямбда-функции в Java.

1 Ответ

4 голосов
/ 20 мая 2019

Вы можете использовать @ClosureParam, чтобы аннотировать объявление аргумента Closure его спецификациями параметров. В вашем конкретном случае:

import groovy.transform.stc.ClosureParams
import groovy.transform.stc.FirstParam

int foo(int num, @ClosureParams(FirstParam) Closure closure) {
    def sum = num
    sum += closure.call(5)
}

, где FirstParam - это подсказка , которая говорит, что аргумент closure имеет тип, равный первому параметру этого метода.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...