code: public static <E, T, U extends T, V extends T> T inject(E[] self, U initialValue, @ClosureParams(value=FromString.class,options="U,E") Closure<V> closure) {
          Object[] params = new Object[2];
          T value = initialValue;
          for (Object next : self) {
              params[0] = value;
              params[1] = next;
              value = closure.call(params);
          }
          return value;
      }
docs: Iterates through the given array, passing in the initial value to
  the closure along with the first item. The result is passed back (injected) into
  the closure along with the second item. The new result is injected back into
  the closure along with the third item and so on until all elements of the array
  have been used. Also known as foldLeft in functional parlance.
  
  @param self         an Object[]
  @param initialValue some initial value
  @param closure      a closure
  @return the result of the last closure call
  @see #inject(Collection, Object, Closure)
  @since 1.5.0