1 2 package org.codehaus.groovy.runtime; 3 4 5 import groovy.lang.Closure; 6 7 /*** 8 * Represents wrapper around a Closure to support currying 9 * 10 * @author Jochen Theodorou 11 */ 12 public class CurriedClosure extends Closure { 13 14 private Object[] curriedParams; 15 16 public CurriedClosure(Closure uncurriedClosure, Object[] arguments) { 17 super(uncurriedClosure); 18 curriedParams = arguments; 19 maximumNumberOfParameters = uncurriedClosure.getMaximumNumberOfParameters()-arguments.length; 20 } 21 22 public Object[] getUncurriedArguments(Object[] arguments) { 23 final Object newCurriedParams[] = new Object[curriedParams.length + arguments.length]; 24 System.arraycopy(curriedParams, 0, newCurriedParams, 0, curriedParams.length); 25 System.arraycopy(arguments, 0, newCurriedParams, curriedParams.length, arguments.length); 26 return newCurriedParams; 27 } 28 29 }