我是Groovy的新手。我想将一个运算符作为函数传递。
而不是:
nums.inject(0) { acc, el -> acc * el }
我想做点什么:
nums.inject(0) {*}
在F#中,这是可能的。 Groovy是否提供相同的语法糖?
let product = List.reduce (*) nums 0
答案 0 :(得分:2)
不允许传递操作符,但函数/闭包是,或多或少等效
def product = nums.inject(1, Math.&multiplyExact)
inject
有两个参数,一个对象和一个闭包。您的示例定义了自己的闭包,但可以使用method pointer operator (.&)
在括号外放置一个文字闭包,{ }
是一个小小的语法糖,可以对任何闭包作为方法调用的最后一个参数。< / p>
答案 1 :(得分:1)
我不这么认为。但是,你可以通过一些元编程接近。
reduce(Object, Closure)
为了让您更好地了解nums.reduce(1) { num -> multiply(num) }
方法的工作原理,还有其他方法可以使用它:
multiply(Number)
闭包的唯一参数是当前元素。因为所有方法调用和属性访问都被委托给累加器,所以acc.multiply(num)
方法对累加器执行:Domain1 d1 = new Domain1("id1", "name1", "attribute1");
Domain2 d2 = new Domain2("id1", "name1", "attribute1");
Domain3 d3 = new Domain3("id1", "name3", "attribute3");
。