groovy - 如何定义一个接受参数化闭包作为参数的 Groovy 函数?

标签 groovy

我想定义一个函数,它接受另一个函数(闭包)作为参数。
第二个函数应该接受 1 个参数。

目前,我只有一个简单的签名:

def func1(func2) {
   func2("string")
}

有没有办法明确指定,func2应该接受 1 个参数(或更少)?

最佳答案

不在 func1 的定义中,但是 you can check maximumNumberOfParameters对于运行时的闭包,像这样:

def func1( func2 ) {
  if( func2.maximumNumberOfParameters > 1 ) {
    throw new IllegalArgumentException( 'Expected a closure that could take 1 parameter or less' )
  }
  func2( 'string' )
}

测试成功:
def f2 = { a -> "returned $a" }
assert func1( f2 ) == 'returned string'

和失败:
def f3 = { a, b -> "returned $a" }
try {
  func1( f3 )
  assert true == false // Shouldn't get here
}
catch( e ) {
  assert e.message == 'Expected a closure that could take 1 parameter or less'
}

关于groovy - 如何定义一个接受参数化闭包作为参数的 Groovy 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11654129/

相关文章:

java - JVM 中多次出现同名组?

java - 从 Java 调用 Groovy 构建器

sql - Groovy SQL 错误 - 此结果集已关闭

json - Grails JSON转换器

mongodb - Grails投影忽略MongoDB的排序顺序

即使定义了变量,Jenkins 管道也会为后期阶段提供 "No such property"

scala - Mirah 比 JRuby、Groovy 和 Scala 提供了什么?

grails - 嵌套Jasper表达式

java - Apache Http Client 4 Form Post 多部分数据

scala - Scala 中是否有 GroovyScriptEngine 和 GroovyClassLoader 之类的东西?