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)` | Invokes the closure with given argument(s), returning any value if applicable.
  `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 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 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

    public ComposedClosure​(Closure first, Closure<V> second)

- ## 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 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 and methods. 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 uses 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)
    Description copied from class: `Closure`
    Invokes the closure with given argument(s), returning any value if applicable.
    Overrides:
      `call` in class `Closure<V>`
    Returns:
      The value if applicable or null if there is no return statement in the closure.