Class CurriedClosure<V>

  • All Implemented Interfaces:
    GroovyCallable<V>, GroovyObject, java.io.Serializable, java.lang.Cloneable, java.lang.Runnable, java.util.concurrent.Callable<V>

    public final class CurriedClosure<V>
    extends Closure<V>
    A wrapper for Closure to support currying. Normally used only internally through the curry(), rcurry() or ncurry() methods on Closure. Typical usages:
     // normal usage
     def unitAdder = { first, second, unit -> "${first + second} $unit" }
     assert unitAdder(10, 15, "minutes") == "25 minutes"
     assert unitAdder.curry(60)(15, "minutes") == "75 minutes"
     def minuteAdder = unitAdder.rcurry("minutes")
     assert minuteAdder(15, 60) == "75 minutes"
    
     // explicit creation
     import org.codehaus.groovy.runtime.CurriedClosure
     assert new CurriedClosure(unitAdder, 45)(15, "minutes") == "60 minutes"
     assert new CurriedClosure(unitAdder, "six", "ty")("minutes") == "sixty minutes"
     
    Notes:
    • Caters for Groovy's lazy (rcurry) and eager (ncurry) calculation of argument position
    See Also:
    Serialized Form
    • Constructor Detail

      • CurriedClosure

        public CurriedClosure​(int index,
                              Closure<V> uncurriedClosure,
                              java.lang.Object... arguments)
        Creates the curried closure.
        Parameters:
        index - the position where the parameters should be injected (-ve for lazy)
        uncurriedClosure - the closure to be called after the curried parameters are injected
        arguments - the supplied parameters
      • CurriedClosure

        public CurriedClosure​(Closure<V> uncurriedClosure,
                              java.lang.Object... arguments)