# Func Object [v1.1.00+]

Represents a user-defined or built-in function which can be called by the script. Func returns an object of this type.

For information about other objects which can be called like functions, see Function Objects.

A reference to a Func object is also known as a function reference. To retrieve a function reference, use the Func function as in the following example:

    ; Retrieve a reference to the function named "StrLen".
    fn := Func("StrLen")

    ; Display information about the function.
    MsgBox % fn.Name "() is " (fn.IsBuiltIn ? "built-in." : "user-defined.")

## Object Members

Properties:

- Name: Returns the function's name.
- IsBuiltIn: Returns true if the function is built-in and false otherwise.
- IsVariadic: Returns true if the function is variadic and false otherwise.
- MinParams: Returns the number of required parameters.
- MaxParams: Returns the number of formally-declared parameters for a user-defined function or maximum parameters for a built-in function.

Methods:

- Call: Calls the function.
- Bind: Binds parameters to the function and returns a BoundFunc object.
- IsByRef: Determines whether a parameter is ByRef.
- IsOptional: Determines whether a parameter is optional.

## Call

Calls the function.

    Func.Call(Param1, Param2, ...)  ; Requires [v1.1.19+]
    Func.(Param1, Param2, ...)  ; Old form - deprecated

Param1, Param2, ...
  Parameters and return value are defined by the function.

[v1.1.07+]: `%Func%()` can be used to call a function by name or reference, or to call an object which implements the __Call meta-function. This should be used instead of `Func.()` wherever possible.

## Bind [v1.1.20+]

Binds parameters to the function and returns a BoundFunc object.

    BoundFunc := Func.Bind(Param1, Param2, ...)

Param1, Param2, ...
  Any number of parameters.

For details and examples, see BoundFunc object.

## Name

Returns the function's name.

    FunctionName := Func.Name

## IsBuiltIn

Returns true if the function is built-in and false otherwise.

    Boolean := Func.IsBuiltIn

## IsVariadic

Returns true if the function is variadic and false otherwise.

    Boolean := Func.IsVariadic

## MinParams

Returns the number of required parameters.

    ParamCount := Func.MinParams

## MaxParams

Returns the number of formally-declared parameters for a user-defined function or maximum parameters for a built-in function.

    ParamCount := Func.MaxParams

If the function is variadic, ParamCount indicates the maximum number of parameters which can be accepted by the function without overflowing into the "variadic*" parameter.

## IsByRef

Determines whether a parameter is ByRef.

    Boolean := Func.IsByRef(ParamIndex)

ParamIndex
  Optional: the one-based index of a parameter. If omitted, Boolean indicates whether the function has any ByRef parameters.

Returns an empty string if the function is built-in or ParamIndex is invalid; otherwise, a boolean value indicating whether the parameter is ByRef.

## IsOptional

Determines whether a parameter is optional.

    Boolean := Func.IsOptional(ParamIndex)

ParamIndex
  Optional: the one-based index of a parameter. If omitted, Boolean indicates whether the function has any optional parameters.

Returns an empty string if ParamIndex is invalid; otherwise, a boolean value indicating whether the parameter is optional.

Parameters do not need to be formally declared if the function is variadic. Built-in functions are supported.