# Func 对象

    class Func extends Object

表示可自定义或内置的函数.

有关其他可以像函数一样调用的对象的信息, 请参阅函数对象.

`Closure` 类继承 `Func`, 但没有定义任何新的属性.

对于脚本中的每个内置函数或函数定义, 都有一个相应的只读变量, 其中包含一个 Func 对象. 这个变量直接用于调用函数, 但它的值也可以被读取, 以检索函数本身, 作为一个值. 例如:

    InspectFn StrLen
    InspectFn InspectFn

    InspectFn(fn)
    {
        ; 显示所传函数的信息.
        MsgBox fn.Name "() is " (fn.IsBuiltIn ? "built-in." : "user-defined.")
    }

属性:

- Name: 返回函数的名称.
- IsBuiltIn: 内置函数返回 true, 否则返回 false.
- IsVariadic: 当函数为可变参数时返回 true, 否则返回 false.
- MinParams: 返回所需参数的数量.
- MaxParams: 对于用户定义函数返回正式声明的参数数目, 对于内置函数返回最大的参数数目.

方法:

- Call: 调用函数.
- Bind: 绑定参数到函数并返回绑定函数对象.
- IsByRef: 确定参数是否为 ByRef 类型.
- IsOptional: 确定参数是否是可选的.

## 属性

## Name

返回函数的名称.

    FunctionName := FuncObj.Name

## IsBuiltIn

内置函数返回 true, 否则返回 false.

    Boolean := FuncObj.IsBuiltIn

## IsVariadic

当函数为可变参数时返回 true, 否则返回 false.

    Boolean := FuncObj.IsVariadic

## MinParams

返回函数必要参数的数目.

    ParamCount := FuncObj.MinParams

## MaxParams

对于用户定义函数返回正式声明的参数数目, 对于内置函数返回最大的参数数目.

    ParamCount := FuncObj.MaxParams

如果函数是可变参数的, ParamCount 表示函数在不考虑 "variadic*" 可变参数的情况下可接受的最大参数数目.

## 方法

## Call

调用一个函数.

    FuncObj(Param1, Param2, ...)
    FuncObj.Call(Param1, Param2, ...)

Param1, Param2, ...
  参数和返回值由函数定义.

调用一个值时, "Call" 方法是隐式的, 所以不需要显式指定.

## Bind

为函数绑定参数并返回绑定函数对象.

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

Param1, Param2, ...
  任意数量的参数.

有关详情和示例, 请参阅绑定函数对象.

## IsByRef

确定一个参数是否为 ByRef(按地址传递) 类型.

    Boolean := FuncObj.IsByRef(ParamIndex)

ParamIndex

  类型: 整数

  可选: 基于 1 的参数索引. 如果省略, Boolean 表示此函数是否含有 ByRef 参数.

返回指示参数是否为 ByRef 的布尔值. 如果 ParamIndex 无效时, 则抛出异常.

## IsOptional

确定一个参数是否是可选的.

    Boolean := FuncObj.IsOptional(ParamIndex)

ParamIndex

  类型: 整数

  可选: 基于 1 的参数索引. 如果省略, Boolean 表示此函数是否含有可选参数.

返回指示参数是否为可选参数的布尔值. 如果 ParamIndex 无效, 则抛出异常.

如果此函数是可变参数的, 那么参数可以不进行正式声明. 支持内置函数.

dftg