別の関数 (クロージャー) をパラメーターとして受け入れる関数を定義したいと考えています。2 番目の関数は、1 つのパラメーターを受け入れる必要があります。
現在、私は単純な署名を持っています:
def func1(func2) {
func2("string")
}
func2
1 つ (またはそれ以下) のパラメーターを受け入れるように明示的に指定する方法はありますか?
別の関数 (クロージャー) をパラメーターとして受け入れる関数を定義したいと考えています。2 番目の関数は、1 つのパラメーターを受け入れる必要があります。
現在、私は単純な署名を持っています:
def func1(func2) {
func2("string")
}
func2
1 つ (またはそれ以下) のパラメーターを受け入れるように明示的に指定する方法はありますか?
の定義にはありませんが、func1
次のように、実行時にクロージャを確認できます。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'
}