我使用maximumNumberOfParameters
来检查闭包中使用的参数数量;
def callerCls(Closure c){
prinltn 'Nb :'+c.maximumNumberOfParameters;
c();
}
后续片段具有相同结果的pb。
callerCls{
}
// and
callerCls{param1->
}
他们两人都回来了:
Nb :1
虽然以下代码,但返回Nb :2
。
callerCls{p1,p2->
}
如何区分没有使用参数的闭包(作为第一个片段)?
答案 0 :(得分:1)
参数说明没有关闭的关闭 - > ,即{},是一个闭包 隐含地命名为'it'的参数。 (详见下文) 在某些情况下,您需要构造一个零参数的Closure,例如: 使用GString进行模板化,定义EMC属性等。您必须这样做 明确将你的Closure定义为{ - >而不只是{}
您也可以使用varargs作为参数,请参阅Formal Guide for 细节。可以模拟JavaScript样式的动态args,参考 非正式指南。