Package org.codehaus.groovy.runtime
Class CurriedClosure<V>
java.lang.Object
groovy.lang.GroovyObjectSupport
groovy.lang.Closure<V>
org.codehaus.groovy.runtime.CurriedClosure<V>
- All Implemented Interfaces:
GroovyCallable<V>
,GroovyObject
,Serializable
,Cloneable
,Runnable
,Callable<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:
-
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
ConstructorDescriptionCurriedClosure
(int index, Closure<V> uncurriedClosure, Object... arguments) CurriedClosure
(Closure<V> uncurriedClosure, Object... arguments) -
Method Summary
Modifier and TypeMethodDescriptionclone()
getOwner()
Class[]
int
Gets the strategy which the closure uses to resolve methods and propertiesObject[]
getUncurriedArguments
(Object... arguments) void
setDelegate
(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, call, compose, composeSelf, composeSelf, curry, curry, dehydrate, getDirective, getMaximumNumberOfParameters, 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
-
CurriedClosure
- Parameters:
index
- the position where the parameters should be injected (-ve for lazy)uncurriedClosure
- the closure to be called after the curried parameters are injectedarguments
- the supplied parameters
-
CurriedClosure
-
-
Method Details
-
getUncurriedArguments
-
setDelegate
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
- 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
-
getOwner
-
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:
-
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:
-
clone
-
getParameterTypes
- Overrides:
getParameterTypes
in classClosure<V>
- Returns:
- the parameter types of the longest doCall method of this closure
-