## com.saxonica.functions.hof
Class FirstClassFunction

    java.lang.Object
      com.saxonica.functions.hof.AbstractFunctionItem
          com.saxonica.functions.hof.FirstClassFunction

All Implemented Interfaces:
  Serializable, PullEvent, FunctionItem, Item, ValueRepresentation

    public class FirstClassFunction

extends AbstractFunctionItem

A FirstClassFunction is a value that encapsulates a function; it can therefore be manipulated like any other value: for example it can be assigned to a variable and passed as a parameter to a function.

A FirstClassFunction can be created using the extension function saxon:function(), and can be invoked using the extension function saxon:call().

In XQuery 1.1, a FirstClassFunction can be created using an inline function literal (for example "fn:contains#2" or an inline function definition, for example "function($x) {$x=0}". It can be called using a dynamic function call such as $f(17).

Currently all FirstClassFunction objects are created statically (at compile time).

See Also:
  Serialized Form

Field Summary

Fields inherited from interface net.sf.saxon.om.ValueRepresentation
`EMPTY_VALUE_ARRAY`

Constructor Summary
`protected` `FirstClassFunction(Expression target, StructuredQName name, int arity, FunctionItemType type)`

Method Summary
`int` `getArity()` Get the arity of the function
`FunctionItemType` `getFunctionItemType()` Determine the item type of the items in the value
`StructuredQName` `getFunctionName()` Get the name of the function
`SequenceIterator` `invoke(SequenceIterator[] args, XPathContext context)` Invoke the function
`void` `typeCheck(ExpressionVisitor visitor, ItemType contextItemType)` Type check the function (may modify it by adding code for converting the arguments)

Methods inherited from class com.saxonica.functions.hof.AbstractFunctionItem
`bind, curry, explain, getStringValue, getStringValueCS, getTypedValue, optimize`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### FirstClassFunction

    protected FirstClassFunction(Expression target,
                                 StructuredQName name,
                                 int arity,
                                 FunctionItemType type)

Method Detail

### getArity

    public int getArity()

  Get the arity of the function

  Returns:
    the number of arguments

### getFunctionName

    public StructuredQName getFunctionName()

  Get the name of the function

  Returns:
    the name of the function, if it has a name, or null otherwise

### getFunctionItemType

    public FunctionItemType getFunctionItemType()

  Determine the item type of the items in the value

  Returns:
    the function item type

### typeCheck

    public void typeCheck(ExpressionVisitor visitor,
                          ItemType contextItemType)
                   throws XPathException

  Type check the function (may modify it by adding code for converting the arguments)

  Overrides:
    `typeCheck` in class `AbstractFunctionItem`
  Parameters:
    `visitor` - the expression visitor, supplies context information
    `contextItemType` - the context item type at the point where the function definition appears
  Throws:
    `XPathException`

### invoke

    public SequenceIterator invoke(SequenceIterator[] args,
                                   XPathContext context)
                            throws XPathException

  Invoke the function

  Parameters:
    `args` - the actual arguments to be supplied
    `context` - the XPath dynamic evaluation context
  Returns:
    the result of invoking the function
  Throws:
    `XPathException`

Copyright (c) 2004-2010 Saxonica Limited. All rights reserved.