Package org.codehaus.groovy.runtime
Class ComposedClosure<V>
java.lang.Object
groovy.lang.GroovyObjectSupport
groovy.lang.Closure<V>
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
Constructors Constructor Description ComposedClosure(Closure first, Closure<V> second)
-
Method Summary
Modifier and Type Method Description 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 uses to resolve methods and propertiesvoid
setDelegate(java.lang.Object delegate)
Allows the delegate to be changed such as when performing markup buildingvoid
setResolveStrategy(int resolveStrategy)
Sets the strategy which the closure uses to resolve property references and methods.Methods inherited from class groovy.lang.Closure
andThen, andThenSelf, andThenSelf, asWritable, call, call, compose, composeSelf, composeSelf, curry, curry, dehydrate, getDirective, getMaximumNumberOfParameters, getOwner, getProperty, getThisObject, isCase, leftShift, leftShift, memoize, memoizeAtLeast, memoizeAtMost, memoizeBetween, ncurry, ncurry, rcurry, rcurry, rehydrate, rightShift, run, setDirective, setProperty, throwRuntimeException, trampoline, trampoline
Methods inherited from class groovy.lang.GroovyObjectSupport
getMetaClass, setMetaClass
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface groovy.lang.GroovyObject
invokeMethod
-
Constructor Details
-
ComposedClosure
-
-
Method Details
-
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 classClosure<V>
- Parameters:
delegate
- the new delegate
-
getDelegate
public java.lang.Object getDelegate()- Overrides:
getDelegate
in classClosure<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 and methods. The default is Closure.OWNER_FIRST- Overrides:
setResolveStrategy
in classClosure<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 uses to resolve methods and properties- Overrides:
getResolveStrategy
in classClosure<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() -
getParameterTypes
public java.lang.Class[] getParameterTypes()- Overrides:
getParameterTypes
in classClosure<V>
- Returns:
- the parameter types of the longest doCall method of this closure
-
doCall
public java.lang.Object doCall(java.lang.Object... args) -
call
-