Class ComposedClosure<V>

  • All Implemented Interfaces:
    GroovyCallable<V>, GroovyObject, Serializable, Cloneable, Runnable, Callable<V>

    public final class ComposedClosure<V>
    extends Closure<V>
    A wrapper for Closure to support composition. Normally used only internally through the rightShift() and leftShift() methods on Closure.

    Typical usages:

     def twice = { a -> a * 2 }
     def inc = { b -> b + 1 }
     def f = { x -> twice(inc(x)) } // longhand
     def g = inc >> twice
     def h = twice << inc
     assert f(10) == 22
     assert g(10) == 22
     assert h(10) == 22
    
     def s2c = { it.chars[0] }
     def p = Integer.&toHexString >> s2c >> Character.&toUpperCase
     assert p(15) == 'F'
    
     def multiply = { a, b -> a * b }
     def identity = { a -> [a, a] }
     def sq = identity >> multiply
     assert (1..5).collect{ sq(it) } == [1, 4, 9, 16, 25]
    
     def add3 = { a, b, c -> a + b + c }
     def add2plus10 = add3.curry(10)
     def multBoth = { a, b, c -> [a*c, b*c] }
     def twiceBoth = multBoth.rcurry(2)
     def twiceBothPlus10 = twiceBoth >> add2plus10
     assert twiceBothPlus10(5, 10) == 40
     
    See Also:
    Serialized Form