org.codehaus.groovy.runtime
Class ComposedClosure<V>

java.lang.Object
  extended by groovy.lang.GroovyObjectSupport
      extended by groovy.lang.Closure<V>
          extended by org.codehaus.groovy.runtime.ComposedClosure<V>
All Implemented Interfaces:
GroovyCallable<V>, GroovyObject, java.io.Serializable, java.lang.Cloneable, java.lang.Runnable, java.util.concurrent.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

Field Summary
 
Fields inherited from class groovy.lang.Closure
DELEGATE_FIRST, DELEGATE_ONLY, DONE, IDENTITY, maximumNumberOfParameters, OWNER_FIRST, OWNER_ONLY, parameterTypes, SKIP, TO_SELF
 
Constructor Summary
ComposedClosure(Closure first, Closure<V> second)
           
 
Method Summary
 V call(java.lang.Object... args)
           
 java.lang.Object clone()
           
 java.lang.Object doCall(java.lang.Object... args)
           
 java.lang.Object getDelegate()
           
 java.lang.Class[] getParameterTypes()
           
 int getResolveStrategy()
          Gets the strategy which the closure users to resolve methods and properties
 void setDelegate(java.lang.Object delegate)
          Allows the delegate to be changed such as when performing markup building
 void setResolveStrategy(int resolveStrategy)
          Sets the strategy which the closure uses to resolve property references.
 
Methods inherited from class groovy.lang.Closure
asWritable, call, call, curry, getDirective, getMaximumNumberOfParameters, getOwner, getProperty, getThisObject, isCase, leftShift, leftShift, memoize, memoizeAtLeast, memoizeAtMost, memoizeBetween, ncurry, rcurry, rightShift, run, setDirective, setProperty, throwRuntimeException, trampoline, trampoline
 
Methods inherited from class groovy.lang.GroovyObjectSupport
getMetaClass, invokeMethod, setMetaClass
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ComposedClosure

public ComposedClosure(Closure first,
                       Closure<V> second)
Method Detail

setDelegate

public void setDelegate(java.lang.Object delegate)
Description copied from class: Closure
Allows the delegate to be changed such as when performing markup building

Overrides:
setDelegate in class Closure<V>
Parameters:
delegate - the new delegate

getDelegate

public java.lang.Object getDelegate()
Overrides:
getDelegate in class Closure<V>
Returns:
the delegate Object to which method calls will go which is typically the outer class when the closure is constructed

setResolveStrategy

public void setResolveStrategy(int resolveStrategy)
Description copied from class: Closure
Sets the strategy which the closure uses to resolve property references. The default is Closure.OWNER_FIRST

Overrides:
setResolveStrategy in class Closure<V>
Parameters:
resolveStrategy - The resolve strategy to set
See Also:
Closure.DELEGATE_FIRST, Closure.DELEGATE_ONLY, Closure.OWNER_FIRST, Closure.OWNER_ONLY, Closure.TO_SELF

getResolveStrategy

public int getResolveStrategy()
Description copied from class: Closure
Gets the strategy which the closure users to resolve methods and properties

Overrides:
getResolveStrategy in class Closure<V>
Returns:
The resolve strategy
See Also:
Closure.DELEGATE_FIRST, Closure.DELEGATE_ONLY, Closure.OWNER_FIRST, Closure.OWNER_ONLY, Closure.TO_SELF

clone

public java.lang.Object clone()
Overrides:
clone in class Closure<V>

getParameterTypes

public java.lang.Class[] getParameterTypes()
Overrides:
getParameterTypes in class Closure<V>
Returns:
the parameter types of the longest doCall method of this closure

doCall

public java.lang.Object doCall(java.lang.Object... args)

call

public V call(java.lang.Object... args)
Overrides:
call in class Closure<V>